使用的硬件平台是STM32F103ZE最小系统
官方提供的例程是UCOSIII+STemWIN
由于入门操作系统是跟着野火的《FreeRTOS 内核实现与应用开发实战—基于STM32》,于是想移植FreeRTOS+STemwin到这个平台.
移植过程中主要出现了以下两种错误
程序卡死在GUI_Init()
完成所有程序的移植后,编译运行没有任何警告和错误。下载到开发板后不能正常运行,通过ST LINK仿真发现程序卡死在HardFault_Handler(void)个人理解为硬件错误中断,那是什么硬件错误了??
原因:使用的硬件平台没有外部RAM
解决方法:将外部RAM的宏定义改为0
error L6406E 空间不足![空间不足](https://i-blog.csdnimg.cn/blog_migrate/a8a48a293f085937d3d64645e1a260c7.png#pic_center)
STM32F103ZE拥有64K RAM和512K Flash
刚入门的我对RAM和Flash的概念不是很清楚,查阅资料发现存储器的分类如下图所示:
易失性存储器:特点是存取速度快
非易失性存储器:长期存储数据
也就是说我们在编译程序时,产生的中间变量不需要一直存在,所以存储在了RAM(平时说的运行内存).程序是需要长期存在的,所以存储在flash中,所以怀疑是RAM空间不足.
在网上搜索关于UCOSIII和Free RTOS的区别时,发现UCOSIII对内存的消耗是大于Free RTOS的,既然商家提供的UCOSIII+STeWin例程是可以运行的,那么在同样的条件下Free RTOS+STemWin肯定能运行,那么问题出现在哪?
肯定是Free RTOS的内存分配有问题.改变系统内存大小,程序运行成功
上面的内容是经过多次实验,查询资料和借鉴其他人的帖子所得
如果有错误,希望各位大佬和爱好者能够准确指正,共同进步.