打印
[其他]

【灵动微电子MM32F0121测评】进阶任务-FREERTOS(AC5)

[复制链接]
451|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
安装的keil的版本比较新,没有AC5的编译器,但使用AC6时,会有很多的编译错误,一时无从下手,于是手动安装了AC5的编译器
下载一份freerots的源码,找到如下文件,复制到工程中。



这里的ARM_CM0文件夹是RVDS目录下的。
在keil 中添加 C文件:



这里增加了一个源文件freeRTOS_Demo.c、头文件FreeRTOSConfig.h,是参考网友(【灵动微电子MM32F0121测评】+移植FreeRTOS,实现打印和led闪烁 - 灵动MM32 MCU官方技术支持论坛)的。

#include "FreeRTOS.h"
#include "task.h"
#include "platform.h"
#include <stdio.h>


#define LED_TASK_STACK_SIZE 128
#define PRINT_TASK_STACK_SIZE 256

void vLED1Task(void *pvParameters) {
    while(1) {
        PLATFORM_LED_Toggle(LED1);
                        printf("LED1 TASK 100MS!\r\n");
        vTaskDelay(pdMS_TO_TICKS(100));
    }
}

void vLED2Task(void *pvParameters) {
    while(1) {
        PLATFORM_LED_Toggle(LED2);
                        printf("LED2 TASK 500MS!\r\n");
        vTaskDelay(pdMS_TO_TICKS(500));
    }
}

void vPrintTask(void *pvParameters) {
    while(1) {
        printf("Hello MM32F0121 FreeRTOS!\r\n");
        vTaskDelay(pdMS_TO_TICKS(2000));
    }
}

void vApplicationMallocFailedHook(void)
{
    printf("Malloc failed!\r\n");
    taskDISABLE_INTERRUPTS();
    while(1);
}

void vApplicationStackOverflowHook(TaskHandle_t xTask, char *pcTaskName)
{
    printf("Stack overflow in task: %s\r\n", pcTaskName);
    taskDISABLE_INTERRUPTS();
    while(1);
}

void freeRTOS_Demo(void)
{
    xTaskCreate(vLED1Task, "LED1", LED_TASK_STACK_SIZE, NULL, 2, NULL);
    xTaskCreate(vLED2Task, "LED2", LED_TASK_STACK_SIZE, NULL, 2, NULL);
    xTaskCreate(vPrintTask, "Print", PRINT_TASK_STACK_SIZE, NULL, 3, NULL);
   
    vTaskStartScheduler();
   
   
    printf("Scheduler failed to start.\r\n");
    while(1);
}



编译器一定要选择版本5的。




配置头文件路径:



运行结果:







使用特权

评论回复
沙发
cashrwood| | 2025-7-2 12:10 | 只看该作者
FreeRTOS 是一个轻量级的实时操作系统,适用于嵌入式系统。

使用特权

评论回复
板凳
kmzuaz| | 2025-7-3 16:02 | 只看该作者
MM32F01121 微控制器上实现了 FreeRTOS 的多任务调度。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

147

主题

1405

帖子

12

粉丝