- 博客(9)
- 收藏
- 关注
原创 查找数组越界导致OS跑飞的问题的过程记录
查看指针变量 Adc_pCfgPtr 指向的地址 0x02040102, 该地址非flash范围,非Ram范围,非Eeprom范围,非芯片寄存器范围,是一个非法地址;程序进上述断点之前,查看CYCLECOUNTER的值,发现每次都是一样的;程序跑一段时间,OS会跑飞,通过在程序处打断点,知道问题与内存访问或资源访问相关的保护机制有关;程序跳上述断点的时候,查看Memory窗口,发现没有堆栈溢出的情况;经过反复调试,发现程序执行到划线处时,系统会跳到错误处理;发生写操作时,程序中断,停在断点处;
2024-08-19 09:51:35
257
原创 如何找到IAR项目里的栈顶和栈底?
栈底(Stack Bottom): 栈底是栈的初始地址,也就是栈被创建时的起始位置。栈顶(Stack Top): 栈顶是栈中最后一个元素的位置,也是栈中下一个元素将要插入的位置。在栈操作过程中,栈顶是可以变化的,每当一个元素入栈时,栈顶就会移动到下一个可用的位置;当一个元素出栈时,栈顶又会移动回到前一个位置。栈的操作入栈(Push): 元素被添加到栈顶的过程。在C语言中,通常是在函数调用时局部变量被分配到栈中,或者是在调用函数时将参数压入栈中。出栈(Pop): 元素从栈顶移除的过程。
2024-08-14 13:57:31
396
原创 如何找到IAR的Disassembly窗口中LDR指令的参数所指向的变量
程序打断点,运行到你要看的那一行汇编指令停下,查看当前PC寄存器值,然后计算出 [PC, #0xXXX] 的值;打开.map文件搜索计算值能找到对应的变量名;下图中,IAR自动显示的变量名有的是不对的;(猜测原因:我这边变量定义的类型都是UINT8)打开对应的.s文件,对相同的代码进行比对,能找到对应的变量名;
2024-08-02 12:28:56
205
原创 Autosar平台集成测试测试OS的执行周期和执行时间
3、利用DavinciCFG工具,将所有的OS Application设置为特权模式,避免MPU功能执行报错;经过两次分频 寄存器PCD (5)和 PSR(128) 调节后的频率: 40M/5/128 = 62500。所以时间每过10ms, LPTMR的计时值增加 625;PCD寄存器选择100b - Divide by 5;重点是上述PCS寄存器选择SPLL时钟源;结果见 IAR调试工具窗口 Watch1;2、注释掉ECC初始化相关代码。SPLL2时钟频率是 40M。1、注释掉看门狗功能。
2024-07-09 16:28:50
173
原创 MCU的程序执行起始地址
配置Flash的布局,APP中断向量表放在地址0x00020000到0x000204FF之间;IAR调试环境显示 MSP初始值 1fff1a00 复位向量 00020a15。中断向量表内容存放在Os_Hal_Entry_Lcfg.c。本项目通过vLinkGen_Template。地址00020a15是 _start函数启动。(Cortex-M书 P165有介绍)向量表第一个地址存放:MSP初始值。向量表第二个地址存放:复位向量。地址1fff1a00是栈顶。
2024-05-31 14:25:16
154
原创 光耦继电器的应用
光耦继电器应用笔记参考https://wenku.baidu.com/view/b59c59084a7302768e993974.htmlhttp://www.elecfans.com/yuanqijian/jidianqi/20171218604733_3.html
2019-08-13 16:31:46
506
原创 关于单片机输出模式的笔记
关于单片机输出模式的笔记参考 https://wenku.baidu.com/view/5611c9e280eb6294dd886c31.html
2019-08-13 16:10:06
190
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人