中级会员
- 积分
- 298
- 金钱
- 298
- 注册时间
- 2016-4-9
- 在线时间
- 97 小时
|
本帖最后由 1723068930wm 于 2023-5-24 20:33 编辑
最近入手了一块原子iMX6ULL Mini板,跟着左盟主学了下裸机开发,然后就想着移植一个FreeRTOS实时操作系统。网上资料着实太少,花了好大力气才跑通,所以就将个人的移植过程分享给大家,水平有限,过程有错误勿喷。
1、准备
1.1 首先是左盟主的裸机开发串口例程,串口方便调试。
1.2 然后是NXP的官网iMX6ULL的评估板例程,下载地址如下:
i.MX 6ULL应用处理器_Arm® Cortex®-A7单核,频率为900 MHz | NXP 半导体
2、移植过程
2.1 文件准备
2.1.1 裸机开发串口例程,这个要自己跑起来。
2.1.2 NXP评估板例程中的rtos文件拷贝到原子的裸机开发串口例程中
其中portable文件夹只要GCC文件夹和MemMang中的heap4.c
再将NXP例程中的FreeRTOSConfig.h文件拷贝到原子的裸机开发串口例程中
再将NXP例程中的两个文件拷贝到原子的裸机开发串口例程中。
按类似方式将NXP例程中文件拷贝到原子的裸机开发串口例程中,不确定需要哪些就都拷贝过来,本人跑通目录如下:
2.2 Makefile修改。
2.2.1 增加源文件和头文件路径.
2.2.2 增加编译选项,主要有-mfpu=neon-vfpv4 用以支持浮点计算单元。
2.2.3 增加编译链接库选项,rtos中用到了memcpy和memset库函数,需要自己链接,如下:
2.3 启动代码start.S修改,freertos中中断服务函数中要进行操作系统任务切换操作,原子的裸机开发串口例程中启动代码不够用。这里需要替换成NXP例程中portASM.S文件中的
IRQ_Handler、SVC_Handler。当然可以在汇编文件中使用weak选项,但是个人在使用weak属性时时没效果,这里只好直接替换。
2.4 freertos的心跳tick设置。个人使用的是GPT1,原子例程中有相应的配置,只是要将优先级设置为最低。
2.5 自行实现vApplicationFPUSafeIRQHandler函数,这个函数就是调用用户中断服务函数,个人实现这哥函数时只是在该函数中调用了一下SystemIrqHandler函数。
2.6 用户任务创建,并启动调度器。本人创建了两个任务,led灯和串口打印任务,另外开启了EPIT1定时器和GPT2定时器,1000hz运行正常。
3、完整代码见附件。
|
|