FreeRTOS+STM32F103 中断测试 卡死

在使用原子的战舰开发板进行中断测试实验时发现,两个定时器只print一下就挂掉了,经过分析发现是SysTick_HandlerxPortSysTickHandler的冲突问题;
在上一篇移植的时候,有一个操作是修改启动文件 startup_stm32f10x_hd.s,替换了三个关于中断的函数,其中注释掉了SysTick_Handler,换成了xPortSysTickHandler,但是在原子的开发手册中关于 delay.c的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,这也证明了上面对启动文件的修改。

你可能感兴趣的:(FreeRTOS+STM32F103 中断测试 卡死)