TA的每日心情 | 开心 2018-6-21 08:39 |
---|
签到天数: 8 天 连续签到: 2 天 [LV.3]偶尔看看II
|
本帖最后由 jasonwangse 于 2018-6-4 23:09 编辑
官方sdk中带有freertos的包和demo,但版本是9.0.0的。freertos拥抱了amazon之后,版本就直接升级到了10.0.0,目前最新的版本是10.0.1,与10.0.0相比只有少许改动。我们先到官网上把最新版下载下来,然后基于野火的库例程工程创建RTOS工程吧
https://www.freertos.org/a00104.html
1. 先创建freertos目录,然后把官方解压包中FreeRTOS目录里的Source文件夹全部拷贝过去
2. 创建freertos组,添加内核源文件和port目前下对应CM7的文件,以及内存管理文件heap_4.c
3. 在Include Paths中添加FreeRTOS及porting的头文件路径
4. 把sdk中的简单rtos demo,freertos_hello,中的FreeRTOSConfig.h拷贝到user目录下
5.将main.c改为app.c并参考freertos_hello demo中的的实现创建任务打印Hello world
- /* FreeRTOS kernel includes. */
- #include "FreeRTOS.h"
- #include "task.h"
- #include "queue.h"
- #include "timers.h"
- /* Freescale includes. */
- #include "fsl_device_registers.h"
- #include "fsl_debug_console.h"
- #include "board.h"
- #include "pin_mux.h"
- #include "clock_config.h"
- /*******************************************************************************
- * Definitions
- ******************************************************************************/
- /* Task priorities. */
- #define hello_task_PRIORITY (configMAX_PRIORITIES - 1)
- /*******************************************************************************
- * Prototypes
- ******************************************************************************/
- static void hello_task(void *pvParameters);
- /*******************************************************************************
- * Code
- ******************************************************************************/
- /*!
- * @brief Application entry point.
- */
- int main(void)
- {
- /* Init board hardware. */
- BOARD_ConfigMPU();
- BOARD_InitPins();
- BOARD_BootClockRUN();
- BOARD_InitDebugConsole();
- if (xTaskCreate(hello_task, "Hello_task", configMINIMAL_STACK_SIZE + 10, NULL, hello_task_PRIORITY, NULL) != pdPASS)
- {
- PRINTF("Task creation failed!.\r\n");
- while (1)
- ;
- }
- vTaskStartScheduler();
- for (;;)
- ;
- }
- /*!
- * @brief Task responsible for printing of "Hello world." message.
- */
- static void hello_task(void *pvParameters)
- {
- for (;;)
- {
- PRINTF("Hello world.\r\n");
- vTaskSuspend(NULL);
- }
- }
复制代码
6. 直接编译,会发现有问题,首先是报头文件freertos_tasks_c_addtions.h找不到
源码中也没有此文件,应该是其他架构或者老版本中会有用,没事,直接将对应的配置项定义为0即可。其次又报找不到SystemCoreClock
system_MIMXRT1052.h中有对此变量的外部声明,在FreeRTOSConfig.h前面加上以下代码就好
- /* For SystemCoreClock */
- #include "system_MIMXRT1052.h"
复制代码
编译成功,下载后直接正常运行
不过目前只是证明在FreeRTOS中创建任务打印没问题了,系统时钟、任务切换有没有问题呢?再创建个简单的测试任务试试看吧,修改app中的代码,添加一个delay打印的代码
- int main(void)
- {
- /* Init board hardware. */
- BOARD_ConfigMPU();
- BOARD_InitPins();
- BOARD_BootClockRUN();
- BOARD_InitDebugConsole();
- if (xTaskCreate(hello_task, "Hello_task", configMINIMAL_STACK_SIZE + 10, NULL, hello_task_PRIORITY, NULL) != pdPASS)
- {
- PRINTF("Task creation failed!.\r\n");
- while (1)
- ;
- }
-
- /* debug console thread, simply counts seconds */
- xTaskCreate(vDebugConsoleTask, "vDebugConsole",
- configMINIMAL_STACK_SIZE, NULL, debugConsole_task_PRIORITY,
- (TaskHandle_t *) NULL);
- vTaskStartScheduler();
- for (;;)
- ;
- }
- /* debug console thread */
- static void vDebugConsoleTask(void *pvParameters) {
- int tickCnt = 0;
- while (1) {
- PRINTF("SysTick: %d \r\n", tickCnt);
- tickCnt++;
- /* About a 1s delay here */
- vTaskDelay(configTICK_RATE_HZ);
- }
- }
复制代码
SysTick一秒打印一次,输出正常
目前来看FreeRTOS已经正常运行起来了,下一步就是移植fatfs和tcpip协议栈了
|
|