FreeRTOS關於啓動文件的修改

 https://www.jianshu.com/p/a6afea04b62c

https://www.jianshu.com/p/01f3580feef8

修改FreeRTOS.h下的兩個宏定義,從0改爲1

 

4.修改startup_stm32f10x_hd.s

在第56行開始的地方

; Vector Table Mapped to Address 0 at Reset
                AREA    RESET, DATA, READONLY
                EXPORT  __Vectors
                EXPORT  __Vectors_End
                EXPORT  __Vectors_Size
/******************************change****************************/
                IMPORT  vPortSVCHandler
                IMPORT  xPortPendSVHandler
                IMPORT  xPortSysTickHandler
/****************************************************************/

__Vectors       DCD     __initial_sp               ; Top of Stack
                DCD     Reset_Handler              ; Reset Handler
                DCD     NMI_Handler                ; NMI Handler
                DCD     HardFault_Handler          ; Hard Fault Handler
                DCD     MemManage_Handler          ; MPU Fault Handler
                DCD     BusFault_Handler           ; Bus Fault Handler
                DCD     UsageFault_Handler         ; Usage Fault Handler
                DCD     0                          ; Reserved
                DCD     0                          ; Reserved
                DCD     0                          ; Reserved
                DCD     0                          ; Reserved
/**************************************change****************************************/
;                DCD     SVC_Handler                ; SVCall Handler
                DCD     vPortSVCHandler
                DCD     DebugMon_Handler           ; Debug Monitor Handler
                DCD     0                          ; Reserved
;                DCD     PendSV_Handler             ; PendSV Handler
                DCD     xPortPendSVHandler
;                DCD     SysTick_Handler            ; SysTick Handler
                DCD     xPortSysTickHandler
/**************************************************************************************/

 

有一個問題  systick系統嘀嗒就不好用了  解決方法:

 

 

void SysTick_Handler(void)
{   
    if(xTaskGetSchedulerState()!=taskSCHEDULER_NOT_STARTED)
    {
        xPortSysTickHandler();  
    }
}

因此在修改啓動文件的時候不需要替換SysTick_Handler就可以:

; Vector Table Mapped to Address 0 at Reset
                AREA    RESET, DATA, READONLY
                EXPORT  __Vectors
                EXPORT  __Vectors_End
                EXPORT  __Vectors_Size
                IMPORT  vPortSVCHandler
                IMPORT  xPortPendSVHandler

__Vectors       DCD     __initial_sp               ; Top of Stack
                DCD     Reset_Handler              ; Reset Handler
                DCD     NMI_Handler                ; NMI Handler
                DCD     HardFault_Handler          ; Hard Fault Handler
                DCD     MemManage_Handler          ; MPU Fault Handler
                DCD     BusFault_Handler           ; Bus Fault Handler
                DCD     UsageFault_Handler         ; Usage Fault Handler
                DCD     0                          ; Reserved
                DCD     0                          ; Reserved
                DCD     0                          ; Reserved
                DCD     0                          ; Reserved
;                DCD     SVC_Handler                ; SVCall Handler
                DCD     vPortSVCHandler
                DCD     DebugMon_Handler           ; Debug Monitor Handler
                DCD     0                          ; Reserved
;                DCD     PendSV_Handler             ; PendSV Handler
                DCD     xPortPendSVHandler
                DCD     SysTick_Handler            ; SysTick Handler

具體爲什麼和定時器中的print函數衝突還有待挖掘;
另外一個就是:
FreeRTOS的demo中F4和F1的FreeRTOSconfig.h有差異,在進行F1中斷測試的時候,需要修改

#define configMAX_SYSCALL_INTERRUPT_PRIORITY    0x4F 

有效的是MSB,也就是4,因爲F1只用了m3內核的16箇中斷,低8位沒有用,設置爲0x4F則:優先級高於4的中斷不會被屏蔽,等於低於4的會被屏蔽掉。
同時分析F4的FreeRTOSconfig.h就會發現


沒有重定義SysTick_Handler,這也證明了上面對啓動文件的修改。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章