日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁(yè) > 單片機(jī) > 單片機(jī)
[導(dǎo)讀] 最近做STM32F030C8的Bootloader升級(jí),使用的是Coocox的工程,發(fā)現(xiàn)Bootloader可以正常跳轉(zhuǎn),但是到應(yīng)用程序時(shí),就直接跑飛,經(jīng)過(guò)仔細(xì)查看,發(fā)現(xiàn)是中斷向量表沒(méi)有映射,但是在把中斷向量表映射后,程序依

最近做STM32F030C8的Bootloader升級(jí),使用的是Coocox的工程,發(fā)現(xiàn)Bootloader可以正常跳轉(zhuǎn),但是到應(yīng)用程序時(shí),就直接跑飛,經(jīng)過(guò)仔細(xì)查看,發(fā)現(xiàn)是中斷向量表沒(méi)有映射,但是在把中斷向量表映射后,程序依舊跑飛。一直自己找了好幾天,在Nick的幫助下,終于解決了,方法如下:

1、在Bootloader里設(shè)置跳轉(zhuǎn):

/* Jump to user application */
JumpAddress = *(__IO uint32_t*) (APPLICATION_ADDRESS + 4);
Jump_To_Application = (pFunction) JumpAddress;

/* Initialize user application's Stack Pointer */
__set_MSP(*(__IO uint32_t*) APPLICATION_ADDRESS);

/* Jump to application */
Jump_To_Application();

2、在Application里重新映射中斷向量表;并修改連接文件,十分重要的是不能用Coocox自帶的連接文件,要重新向Coocox公司要一份新的,否則向量映射不成功,程序就跑飛。

#if (defined ( __CC_ARM ))
__IO uint32_t VectorTable[48] __attribute__((at(0x20000000)));
#elif (defined (__ICCARM__))
#pragma location = 0x20000000
__no_init __IO uint32_t VectorTable[48];
#elif defined ( __GNUC__ )
__IO uint32_t VectorTable[48] __attribute__((section(".RAMVectorTable")));
#elif defined ( __TASKING__ )
__IO uint32_t VectorTable[48] __at(0x20000000);
#else
#error "it should define the vector table"
#endif

int main(void)
{
#if 1
uint32_t i;

/* Relocate by software the vector table to the internal SRAM at 0x20000000 ***/

for(i = 0; i < 48; i++)
{
VectorTable[i] = *(__IO uint32_t*)(APPLICATION_ADDRESS + (i<<2));
}

/* Enable the SYSCFG peripheral clock*/
RCC_APB2PeriphResetCmd(RCC_APB2Periph_SYSCFG, ENABLE);
/* Remap SRAM at 0x00000000 */
SYSCFG_MemoryRemapConfig(SYSCFG_MemoryRemap_SRAM);
#endif
}

在以上完成中斷向量映射后,就要修改連接文件了,我對(duì)比了Coocox自帶的link文件和向Coocox要的link文件,發(fā)現(xiàn)自帶的link文件,缺少向量重新映射的配置代碼,具體如下:

.ARM.attributes 0 : { *(.ARM.attributes) }
/* RAM space for the vector table */
.RAMVectorTable(NOLOAD): {*(.RAMVectorTable)} >VTRAM

當(dāng)把以上的代碼加在自帶的link文件_sidata = __etext;代碼后面,重新編譯生成bin文件,再次用Bootloader升級(jí)后,發(fā)現(xiàn)程序正常執(zhí)行。


本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀(guān)點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀
關(guān)閉