1、首先下载一份源码。
2、然后按照雅特力的移植文档操作,freertos只有内核,移植起来超级简单只需要把src目录下的几个源文件、heap4和port文件添加现有工程里。将3个中断函数用_weak 改为虚函数。再添加一个配置文件FreeRTOSConfig.h就可以编译通过了。
3、第二步会遇到一个问题就是port文件按照官方的文档是用这个Source\portable\RVDS\ARM_CM4F 目录下的,但是由于AT32F415是不带浮点运算器的,会报如下错误。
This port can only be used when the project options are configured to enable hardware floating point support.
所以需要使用官方移植工程里的port文件,这个文件应该是雅特力专用的。
port_nofpu.c 在ARM_CM3目录下,这就挺奇怪的,因为AT32F415明明是M4的内核。
4、如果使用在中断使用的API可能会报错,参考下面的文章。看freertos的配置文件可知,free的最高系统调用中断优先级为1,我们使用API所在的中断优先级不能高于1。也就是说数字不能小于1.
/* The highest interrupt priority that can be used by any interrupt service
routine that makes calls to interrupt safe FreeRTOS API functions. DO NOT CALL
INTERRUPT SAFE FREERTOS API FUNCTIONS FROM ANY INTERRUPT THAT HAS A HIGHER
PRIORITY THAN THIS! (higher priorities are lower numeric values. */
#define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 0x01
FreeRTOS运行不稳定的原因记录_configassert( uccurrentpriority >= ucmaxsyscallpri-CSDN博客
笔者本来准备用国产的RTThread系统,但是刚开始就遇到很多坑,先是官方的开发环境不好用,然后是,看了半天官方资料也没看 明白线程应该在哪里添加。最后添加上了,发现在自己创建的线程里I2C一运行就报错,说调度还没开始,不能使用锁。但是刚开始测的时候在main线程里调用i2c是正常的,真是心累。不过rtthead支持的国产芯片倒是挺多的,内核和芯片外设使用类似linux的menuconfig进行配置,还挺方便的。就是真的没有时间去踩坑了,只能遗憾先放放了。