0x00

printf在MCU環境下print debug error message,利用Logic Analyzer模擬MCU register or GPIO狀態。

若是要要使用printf函數且顯示在Debug Viewer (printf) ,必須加上Regtarge.c這個檔案實際內容如下

 #include <stdio.h>
#include <rt_misc.h>
#include "stm32f4xx.h" #pragma import(__use_no_semihosting_swi)
extern int SendChar(int ch);
extern int GetKey(void); struct __FILE {
int handle;
}; FILE __stdout;
FILE __stdin; /* #define ITM_DEBUG = 1 */
#define ITM_DEBUG = 1 //#if defined (ITM_DEBUG)
#ifdef ITM_DEBUG int fputc(int ch, FILE *f) {
return (ITM_SendChar(ch));
}
#else int fputc(int ch, FILE *f)
{
return SendChar(ch);
} #endif int fgetc(FILE *f) {
return (SendChar(GetKey()));
} void _ttywrch(int ch) {
SendChar (ch);
} int ferror(FILE *f) {
return EOF;
} void _sys_exit(int return_code) {
label: goto label;
}

在6, 7行的函數主要有在main.c裡頭實現,目的是將printf函數內容透過USART傳送到PC,而Regtarge.c主要目的改寫底層函數。

extern int  GetKey(void);
extern int GetKey(void);

在配置上我捫必須做一點小更改 Micro LIB 打勾,這樣就可以使用C standard library相關函數

但這樣還無法完全使用printf顯示到 debug viewer上,必須在對debugger (ICE) 做一點設定上的修改。

Core Clock 必須填上System Clock才能正常顯示在視窗上。

假如需要使用類似邏輯分析儀(LA)的功能,可以透過Keil配置使用 Logic Analyzer

首先針對MCU的Mamory Map針對週邊實際定義的Address設定read/write權限。

建立一個ini檔案內容如下

map 0x40000000,0x400FFFFF read write

在Keil裡頭選擇ini檔案位置,確認可以針對Address可以進行模擬。紅框部分都是需要注意的地方。

Keil LA 使用上必須填寫Address的正確位置,範例是針對GPIO做模擬,所以只會看到GPIO H/L。

Sample code是delay 500us 進行GPIO轉態,d代表cursor的時間差0.5ms也就是delay 500us。

輸入Reg使用方法如下。

(Keil) Debug & Simulation 操作的更多相关文章

  1. Keil debug command SAVE 命令保存文件的解析

    简介 使用 Keil debug 很方便,把内存中的一段区域 dump 出来也很方便,例如使用命令 SAVE filepath startAddr, endAddr, typeCode .但是要查看 ...

  2. Keil Debug (printf) Viewer

    Debug (printf) Viewer Home » µVision Windows » Debug (printf) Viewer The Debug (printf) Viewer windo ...

  3. pycharm debug的操作

    ###################################### """ pycharm的debug按钮是右上角的一个小虫子, debug,要打断点,debu ...

  4. 汇编语言实验1—Debug基础操作

    1.使用Debug,将下面的程序段写入内存,逐条执行,观察每条指令执行后CPU中相关寄存器中内容的变化. 记录1:最后一条指令执行完BX=(4026)H,AL=(66)H,检验结果. 两种写入:e命令 ...

  5. keil在线烧录突然提示 No target connected #

    keil在线烧录突然提示 No target connected 运行环境 IDE:keil uvsion5 微处理器:STM32F0xx 系列 烧录器:ST-LINK/V2 问题描述 烧录新程序并进 ...

  6. Keil MDK 无法设置断点【worldsing】

    要解决一个问题就怕不知道怎么搜索,或是别人没有遇到过: 同样碰到Keil MDK Debug调试无法设置断点问题,首先来问百度,GOOGLE,一下是我搜索到的结果:   1.keil 不能设置断点,每 ...

  7. IntelliJ IDEA. Debug模式

    资料收集: https://www.bilibili.com/video/av6749471/?p=16 eclipse debug模式. 基础 Intellij Idea--Debug使用 Inte ...

  8. Android开发学习——开发调试工具-DDMS应用,ADB进程,Logcat,Eclipse Debug调试

    DDMS --  Dalvik debug monitor service    调试监控服务 对模拟器进行相关配置. ADB进程   Android debug bridge  建立eclipse和 ...

  9. 【Django】ORM操作#2

    目录 必知必会的13条查询方法 单表查询之神奇的双下划线 一对多 ForeignKey 多对多 ManyToManyField 在Python脚本中调用Django环境 Django终端打印SQL语句 ...

随机推荐

  1. Python基础学习四 列表、元组、字典、集合

    列表list,用中括号“[ ]”表示 1.任意对象的有序集合 列表是一组任意类型的值,按照一定顺序组合而成的 2.通过偏移读取 组成列表的值叫做元素(Elements).每一个元素被标识一个索引,第一 ...

  2. nodejs npm install -g 全局安装和非全局安装的区别

    1. npm install xxx -g 时, 模块将被下载安装到[全局目录]中. [全局目录]通过 npm config set prefix "目录路径" 来设置. 比如说, ...

  3. swift之xib关联UIView

    有点坑爹,设置file owner 不行,搞了一早上,来说下怎么关联吧 自定义UIView要重写 required init(coder aDecoder: NSCoder) { super.init ...

  4. Linux下安装Python2.7

    Linux下安装Python2.7 CentOS6.8 中默认安装了Python2.6,但是很多应用需要使用Python2.7,于是要学会如何在Linux下安装Python2.7,这里记录一下,免得以 ...

  5. Django中间件CsrfViewMiddleware源码分析

    Django Documentation csrf保护基于以下: 1, 一个CSRF cookie基于一个随机生成的值,其他网站无法得到,次cookie有CsrfViewMiddleware产生.它与 ...

  6. Linux GCC编译警告:Clock skew detected. 错误解决办法

    今天在虚拟机上用GCC编译一个程序的时候,出现了下面的错误: make: warning: Clock skew detected. Your build may be incomplete 试了ma ...

  7. laravel中间键组

    ` php artisan make:middleware Lend这边我定义一个登陆的中间件这边要注意的就是,当条件成立的时候一定要 return $next($request);不写这个larav ...

  8. Android selector中的item的顺序

    在selector中,要将默认状态的item放在最后面,因为一旦前面的item满足匹配条件,后面的item就不会去匹配.因此,把默认状态的item放在前面的话,后面的item没有执行的机会

  9. ajax load事件

    ajax.load  使用ajax 来改变div元素文本. load( url [, data][, callback] ) load()方法的传递方式根据参数data来自动指定.如果没有参数传递,则 ...

  10. c语言实践 用1角 2角 5角 凑成10元钱的方法

    /* 用1角,2角,5角凑出10元钱,有几种办法. 也就是0.1a+0.2b+0.3c=10,化简一下就是 a=100-2b-3c 因为a的范围是0到100,所以弄一个循环 把a的值从0尝试到100, ...