ruboss 发表于 2024-4-18 23:06:15

MDK5.39使用CMSIS-View和CMSIS-Compiler实现stdout重定向故障

问题描述:最近看更新了新版MDK和一些新的组件,想试一试什么效果,用一些老工程直接切换,发现Event Recorder无法工作,因此直接使用MDK5.39创建全新工程,全部组件都用新的;发现虽然Event Recorder工作了,但程序却死机了。


1.使用新的组件(CMSIS-Compiler和CMSIS-View两个一起替代了ARM-Compiler)


2.配置运行环境,stdout使用Event Recorder


3.Event Recorder使用DWT为时钟


4.任务中增加打印,仿真发现printf后死机了,定位发现是EventRecorderTimerGetCount函数里出问题了,里面只是获取了一下DWT计数器


5.更改Event Recorder为RTOS时钟,重新仿真,故障消除


这样就很迷了,尝试了手动初始化DWT无效果,不知道咋回事,网友们帮忙看看

ruboss 发表于 2024-4-18 23:16:19

安装5.39版本之前,看到很多网友说这个版本build跟rebuild一样。
我用新版打开老工程也是这个问题,但是编译这个完全用新版创建的工程后发现,修改单个文件后build只编译了这一个文件。
因此这个可能是向前兼容的问题

eric2013 发表于 2024-4-19 08:38:13

通过楼主的描述,这样的话就是DWT时钟周期计数器在MDK5.39的AC6.21下无法正常运行。回头我试试。

ruboss 发表于 2024-4-19 22:10:22

今晚用旧的组件创建工程,一点点往上加,最终发现是一个地方改变了默认值,导致程序运行死机,差别如下:

eric2013 发表于 2024-4-20 08:39:02

ruboss 发表于 2024-4-19 22:10
今晚用旧的组件创建工程,一点点往上加,最终发现是一个地方改变了默认值,导致程序运行死机,差别如下:

谢谢告知最终原因。

非特权级模式不能访问内核寄存器,含DWT
页: [1]
查看完整版本: MDK5.39使用CMSIS-View和CMSIS-Compiler实现stdout重定向故障