安装的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的。
配置头文件路径:
运行结果:
|