f0启用rtx 只是用到简单的rtx的核心部分。不加引导,程序正常,加了引导,程序就一直报线程栈溢出,而且是空闲线程的溢出。确定引导是正常,问题肯定出在应用层的向量设置。查找了.s的启动文件,把里边设置栈等全部注释,如下:
IMPORT __main
IMPORT SystemInit
; LDR R0, =__initial_sp ; set stack pointer
; MSR MSP, R0
;;Check if boot space corresponds to test memory
; LDR R0,=0x00000004
; LDR R1, [R0]
; LSRS R1, R1, #24
; LDR R2,=0x1F
; CMP R1, R2
; BNE ApplicationStart
;; SYSCFG clock enable
; LDR R0,=0x40021018
; LDR R1,=0x00000001
; STR R1, [R0]
;; Set CFGR1 register with flash memory remap at address 0
; LDR R0,=0x40010000
; LDR R1,=0x00000000
; STR R1, [R0]
ApplicationStart
LDR R0, =SystemInit
BLX R0
LDR R0, =__main
之后本以为大功告成,但还是不行,真是活见鬼,想不通。
最后想想,要不把下边向量设置函数放system_stm32f0xx文件里边的SystemInit (void)函数内,居然可以了。
void Flash_OffSet(void)
{
uint8_t i;
uint32_t Data, Address;
//Set Flash offest
for (i = 0; i < 48; i++)
{
Data = *(__IO u32 *)(FLASHOFFSET + i * 4);
Address = 0x20000000 + (i * 4);
*(__IO u32 *)Address = (u32)Data;
}
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
SYSCFG_MemoryRemapConfig(SYSCFG_MemoryRemap_SRAM);
}
理论上,这个函数放main初始也可以呀,不加rtx 的工程我都是放main里边开头设置。
离线