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,这也证明了上面对启动文件的修改。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 包(lib)、模块(module) 在Python中,存在包和模块两个常见概念。 模块:编写Python代码的py...
    清清子衿木子水心阅读 9,212评论 0 27
  • Python 面向对象Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对...
    顺毛阅读 9,675评论 4 16
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 11,240评论 0 10
  • 儿子给她姑姑发信息说,姑姑你春节来不来我家啊! 我说这也是你姑姑的家。 儿子说,是姑姑小时候的家吧。 妻子在旁笑着...
    瓦落雨阅读 1,652评论 0 1
  • 江子卿 年少起乡愁,驱车向乐游。 旧时雨淋幕,今日风拂楼。 深寺晨钟作,幽堂暮鼓休。 夕阳无限好,不见鸟悲啾。
    大雨_a6e7阅读 1,868评论 0 0

友情链接更多精彩内容