1、按照RT1052开发指南第三章建立一个新工程,工程名字可以为FreeRTOS_RT1052 注意修改sys.c中的armPllConfig 、sysPllConfig 、usb1PllConfig 常量值得定义,在《4、移植Coremark时发现的问题》一文中有详细修改内容:
2、在新建工程下增加一个FreeRTOS的目录,并且移植FreeRTOS9.0的代码,FreeRTOS的代码正点原子的光盘里面已经准备好“号令者RT1052光盘资料(A盘)\6,软件资料\14,FreeRTOS学习资料\FreeRTOS源码”,FreeRTOSv9.0.0.exe执行后即可解压出来,将对应的文件拷贝出来。 注意 Portable目录中仅需要拷贝Keil(See-also-the-RVDS-directory)目录中的ARM_CM7\r0p1中的文件 在工程项目中增加一个FreeRTOS的包,添加FreeRTOS目录及子目录(子目录CMSIS_RTOS、portable\Keil\ARM_CM7\r0p1、\portable\MemMang\heap_4.c)中的C文件 C/C++标签栏中Include Paths中增加FreeRTOS目录中的部分 在Main.c中增加头文件定义 直接编译项目仅出现以下错误,说明FreeRTOS环境准备完毕,就可以增加业务逻辑了。
这里利用开发板的LED0、LED1来实现点灯应用。 可参考“号令者RT1052光盘资料(A盘)\4,程序源码\2,标准例程-库函数版本\实验1 跑马灯试验\HARDWARE”程序引入LED目录中的驱动和控制程序 在项目中新增HARDWARE 目录,将LED 目录拷贝到FreeRTOS项目中,再项目中增加HardWare包,添加Led.c, Include path中添加 ..\HardWare\LED 路径设置
在Main.h文件中增加以下定义: - #ifndef _MAIN_H_
- #define _MAIN_H_
- #include "sys.h"
- #include "led.h"
复制代码
在Main.C文件中增加以下内容: - #include "main.h"
- #include "cmsis_os.h"
- void vStartLedRedTask(void const * argument);
- void vStartLedGreenTask(void const * argument);
- uint32_t utime_tick = 0;
- //红灯闪亮任务
复制代码修改main() 函数内容如下: - int main(void){
- MPU_Memory_Protection();
- RT1052_Clock_Init();
- SysTick_Config(SystemCoreClock/EE_TICKS_PER_SEC);
- RT1052_NVIC_SetPriority(SysTick_IRQn, 0, 0);
- LED_Init();
- xTaskCreate((TaskFunction_t)vStartLedRedTask,
- "LED0",
- configMINIMAL_STACK_SIZE,
- NULL,
- tskIDLE_PRIORITY,
- NULL);
- xTaskCreate((TaskFunction_t)vStartLedGreenTask,
- "LED1",
- configMINIMAL_STACK_SIZE,
- NULL,
- tskIDLE_PRIORITY,
- NULL);
- vTaskStartScheduler();
- while(1){
- }
- }
复制代码 至此代码编辑完成,编译下载到号令者RT1052开发板中可以看到以下动画的结果,RT1052已可以跑FreeRTOS相关的代码:可以参考正点原子的裸机应用程序将串口、网络、液晶屏等应用移植到FreeRTOS环境下实现功能。
|