当前位置:   article > 正文

FreeRTOS关于启动文件的修改_有freertos的程序怎么更改程序启动地址

有freertos的程序怎么更改程序启动地址

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

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

修改FreeRTOS.h下的两个宏定义,从0改为1

 

4.修改startup_stm32f10x_hd.s

在第56行开始的地方

  1. ; Vector Table Mapped to Address 0 at Reset
  2. AREA RESET, DATA, READONLY
  3. EXPORT __Vectors
  4. EXPORT __Vectors_End
  5. EXPORT __Vectors_Size
  6. /******************************change****************************/
  7. IMPORT vPortSVCHandler
  8. IMPORT xPortPendSVHandler
  9. IMPORT xPortSysTickHandler
  10. /****************************************************************/
  11. __Vectors DCD __initial_sp ; Top of Stack
  12. DCD Reset_Handler ; Reset Handler
  13. DCD NMI_Handler ; NMI Handler
  14. DCD HardFault_Handler ; Hard Fault Handler
  15. DCD MemManage_Handler ; MPU Fault Handler
  16. DCD BusFault_Handler ; Bus Fault Handler
  17. DCD UsageFault_Handler ; Usage Fault Handler
  18. DCD 0 ; Reserved
  19. DCD 0 ; Reserved
  20. DCD 0 ; Reserved
  21. DCD 0 ; Reserved
  22. /**************************************change****************************************/
  23. ; DCD SVC_Handler ; SVCall Handler
  24. DCD vPortSVCHandler
  25. DCD DebugMon_Handler ; Debug Monitor Handler
  26. DCD 0 ; Reserved
  27. ; DCD PendSV_Handler ; PendSV Handler
  28. DCD xPortPendSVHandler
  29. ; DCD SysTick_Handler ; SysTick Handler
  30. DCD xPortSysTickHandler
  31. /**************************************************************************************/

 

有一个问题  systick系统嘀嗒就不好用了  解决方法:

 

 

  1. void SysTick_Handler(void)
  2. {
  3. if(xTaskGetSchedulerState()!=taskSCHEDULER_NOT_STARTED)
  4. {
  5. xPortSysTickHandler();
  6. }
  7. }

因此在修改启动文件的时候不需要替换SysTick_Handler就可以:

  1. ; Vector Table Mapped to Address 0 at Reset
  2. AREA RESET, DATA, READONLY
  3. EXPORT __Vectors
  4. EXPORT __Vectors_End
  5. EXPORT __Vectors_Size
  6. IMPORT vPortSVCHandler
  7. IMPORT xPortPendSVHandler
  8. __Vectors DCD __initial_sp ; Top of Stack
  9. DCD Reset_Handler ; Reset Handler
  10. DCD NMI_Handler ; NMI Handler
  11. DCD HardFault_Handler ; Hard Fault Handler
  12. DCD MemManage_Handler ; MPU Fault Handler
  13. DCD BusFault_Handler ; Bus Fault Handler
  14. DCD UsageFault_Handler ; Usage Fault Handler
  15. DCD 0 ; Reserved
  16. DCD 0 ; Reserved
  17. DCD 0 ; Reserved
  18. DCD 0 ; Reserved
  19. ; DCD SVC_Handler ; SVCall Handler
  20. DCD vPortSVCHandler
  21. DCD DebugMon_Handler ; Debug Monitor Handler
  22. DCD 0 ; Reserved
  23. ; DCD PendSV_Handler ; PendSV Handler
  24. DCD xPortPendSVHandler
  25. 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,这也证明了上面对启动文件的修改。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/56653
推荐阅读
相关标签
  

闽ICP备14008679号