关于STM32 KEIL MDK环境下,程序在RAM中调试的问题 STM32 KEIL C如何在RAM中调试FREERTOS?

\u5982\u4f55\u5728keil\u4e2d\u8bbe\u7f6e\u4ee3\u7801\u5728RAM\u4e2d\u8fd0\u884c

\u8fd9\u9700\u8981 \u52a0\u5165\u5411\u91cf\u8868\u7684\u5b9a\u4e49\uff1b \u52a0\u5165\u8fd9\u6bb5\u8bdd #ifdef VECT_TAB_RAM /* Set the Vector Table base location at 0x20000000 */ NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0); //\u5411\u91cf\u8868\u4f4d\u4e8eRAM #else /* VECT_TAB_FLASH */ /* Set the Vector Table base

\u8fd9\u9700\u8981 \u52a0\u5165\u5411\u91cf\u8868\u7684\u5b9a\u4e49\uff1b

\u52a0\u5165\u8fd9\u6bb5\u8bdd
#ifdef VECT_TAB_RAM
/* Set the Vector Table base location at 0x20000000 */
NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0); //\u5411\u91cf\u8868\u4f4d\u4e8eRAM
#else /* VECT_TAB_FLASH */
/* Set the Vector Table base location at 0x08000000 */
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0); //\u5411\u91cf\u8868\u4f4d\u4e8eFLASH
#endif

\u4e5f\u53ef\u4ee5\u76f4\u63a5\u5199\u5165\uff1b
NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0); //\u5411\u91cf\u8868\u4f4d\u4e8eRAM

\u795d\u4f60\u6210\u529f\uff01

芯片复位后进入的是复位中断入口地址,一般是0,并且位于FLASH中。然后在入口处放置一条跳转指令,跳转到指定的地址执行。所以如果想复位后从RAM中执行,那么必须修改bootloader,也就是最初的那段汇编代码,把跳转的地址改成RAM的地址。

在RAM中调试和从RAM中启动是两个不同的概念,
实验证明,在RAM中调试不需要改变BOOT1和BOOT0引脚。
在调试的过程中如果单击了RST复位按钮,则需要重新Debug!
所以,你的问题只能重新Debug。
望采纳,谢谢!

硬件上要跳线,请注意一下STM32的Boot0,Boot1这两个pin在上电时的电压,是否从RAM上执行由这两个pin的电压决定。
如果你用的是外面买的调试板,这这两个管脚应该可以通过跳线设置。具体请阅读datasheet.

扩展阅读:keil5添加stm32芯片包 ... keil stm32芯片包下载 ... stm32智能小车keil 代码 ... slippery ... 动态链接库user32 dll ... keil5下载stm32 ... keil uvision5 ... 新手玩mc系列03 ... keil中没有stm32的型号 ...

本站交流只代表网友个人观点,与本站立场无关
欢迎反馈与建议,请联系电邮
2024© 车视网