WhyCan Forum(哇酷论坛)

人过留名,雁过留声,感谢各位朋友不离不弃地支持。 QQ: 516333132, 微信: whycan_cn (哇酷网/挖坑网/填坑网) admin@whycan.cn

您尚未登录。

#1 2018-11-13 14:43:16

BugActiveDaughter
Moderator
注册时间: 2017-10-17
累计积分: 89

f0 跑rtx加引导引起诡异事情,已解决,分享一下

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里边开头设置。

离线

#2 2018-11-13 15:36:49

晕哥
Administrator
注册时间: 2017-09-06
累计积分: 9,061

Re: f0 跑rtx加引导引起诡异事情,已解决,分享一下

感谢美女工程师分享!

离线

页脚