赞
踩
https://www.jianshu.com/p/a6afea04b62c
https://www.jianshu.com/p/01f3580feef8
修改FreeRTOS.h下的两个宏定义,从0改为1
在第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,这也证明了上面对启动文件的修改。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。