![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
CPU
文章平均质量分 85
89er
这个作者很懒,什么都没留下…
展开
-
二、arm程序在debug工具介入时可以跑完但是烧录到flash中会停留在BKPT 0xAB的解决方法
所谓的半主机模式:semihosting机制参考arm development referrence.它使得在ARM目标上跑的代码,如果主机电脑运行了调试器,那么该代码可以使用该主机电脑的输入输出设备。这点非常重要,因为开发初期,可能开发者根本不知道该ARM器件上有什么输入输出设备,而半主基机制使得你不用知道ARM器件的外设,利用主机电脑的外设就可以实现输入输出调试。 反之,要利用目标ARM器件的输入输出设备,首先要关掉半主机机制。然后再将输...原创 2021-12-27 15:03:19 · 1574 阅读 · 1 评论 -
一、arm程序在debug工具介入时可以跑完但是烧录到flash中会停留在BKPT 0xAB的解决方法
最近在调试arm程序,一般都会用到uart来log message,一是可以保证CPU正常run,二是可以debug程序bug在哪个位置。 而用uart log message,一般都会采用printf的库函数,然后retarget库函数的porting即可。当然也可以自己实现printf函数,即各种字符处理,format处理等等。我觉得自行实现printf应该比较占用code size,所以还是会采用重定向printf的方式。 目前有三种方式来实现:...原创 2021-12-23 17:43:19 · 1143 阅读 · 0 评论 -
二、barrier指令DSB,DMB,ISB,fence——内存屏障,指令屏障
我们编写的源代码需要经过编译器转换成机器指令,最后由CPU执行这些指令。编译器作为一个“翻译官”,并不会老老实实地逐条翻译,而是会对我们的代码按照自己的“想法”进行调整和重组。CPU作为一个执行部件,对交给它的指令也不会规规矩矩的逐条执行,而是会重新排序之后执行。这么“不尊重”我们的代码顺序,它们有权利这么做吗?它们有,因为它们高举的是“为效率优化”的大旗,一切都是为了你编写的代码能更快地执行,就像小时候某些家长常说的“都是为了你好”。为了我好我就一定能好么,那可不一定,因为他们虽然经验丰富,但毕竟转载 2021-12-23 16:03:48 · 3152 阅读 · 0 评论 -
一、barrier指令DSB,DMB,ISB,fence——内存屏障,指令屏障
最近工作中遇到一个问题,大致描述一下: 我们SOC用的arm cortex m7内核,在设计时设计人员图方便,将SPI controller的寄存器(即原本应该是APB空间)放在了0x60000000的某一块空间(此空间arm的memory定义区间为external memory),然后同时把SPI flash的存储空间也映射在了0x60000000的这一块区间内。后者将spi flash memory映射在此区间内其实时合理的。但是将spi controller的寄存器也放在这块空间,验...原创 2021-12-23 15:48:11 · 8549 阅读 · 2 评论