DEVKIT-mpc5744p配置rtos
软件:S32 Design Studio for Power Architecture Version 2.1
新建工程,配置与生成代码
ref: 野火 《FreeRTOS 内核实现与应用开发实战—基于STM32》
可在野火大学堂下载 或 下载链接
本文代码供参考
配置
- 在
component library
中双击添加rtos
模块
- 再在
components
中双击这个模块,进入配置界面,完成配置
- 配置3个led接口为输出
ctrl+s
保存, 生成代码
- 添加
Task/task_start.c task_start.h task_led.c task_led.h
(可在别的地方创建, 拖进工程文件夹)
- 在
main.c
中添加包含头文件, 时钟, 引脚, rtos初始化#include "task_start.h" CLOCK_SYS_Init(g_clockManConfigsArr, CLOCK_MANAGER_CONFIG_CNT, g_clockManCallbacksArr, CLOCK_MANAGER_CALLBACK_CNT); CLOCK_SYS_UpdateConfiguration(0U, CLOCK_MANAGER_POLICY_AGREEMENT); PINS_DRV_Init(NUM_OF_CONFIGURED_PINS, g_pin_mux_InitConfigArr); RTOS_Start();
task_start.h
#ifndef TASK_START_H #define TASK_START_H #include "FREERTOS.h" #include "task.h" #include "FREERTOS.h" #include "queue.h" #include "semphr.h" #include "task_led.h" #include "task_swt.h" #include "Cpu.h" extern void StartTask(void * pvParameters); extern void RTOS_Start(void); #endif
task_start.c
#include "FREERTOS.h" #include "queue.h" #include "semphr.h" #include "task_start.h" TaskHandle_t StartTask_Handle; void StartTask(void * pvParameters) // 初始化3个led任务 { taskENTER_CRITICAL(); //进入临界区 FCCU_DRV_Init(INST_FCCU1, fccu1_Control0, fccu1_NcfConfig0); SWT_DRV_Init(INST_SWT1, &swt1_Config0); PINS_DRV_ClearPins(PTC,(1 << 11)); PINS_DRV_SetPins(PTC,(1 << 12)); xTaskCreate(vLEDTaskG,(const char * const)"vLEDTaskG", configMINIMAL_STACK_SIZE, (void*)0, 2, NULL); xTaskCreate(vLEDTaskB,(const char * const)"vLEDTaskB", configMINIMAL_STACK_SIZE, (void*)0, 2, NULL); taskEXIT_CRITICAL(); //退出临界区 vTaskDelay(1000); taskENTER_CRITICAL(); //进入临界区 xTaskCreate(vLEDTaskR,(const char * const)"vLEDTaskR", configMINIMAL_STACK_SIZE, (void*)0, 2, NULL); PINS_DRV_ClearPins(PTC,(1 << 13)); xTaskCreate(vSwtTask,(const char * const)"vSwtTask", configMINIMAL_STACK_SIZE, (void*)0, 4, NULL); vTaskSuspend(StartTask_Handle); //初始化完成以后挂起开始任务 taskEXIT_CRITICAL(); //退出临界区 } void RTOS_Start(void) { xTaskCreate(StartTask, ( const char * const )"Start Task", 300, NULL, 10,&StartTask_Handle); /* Start the tasks and timer running. */ vTaskStartScheduler(); }
task_led.h
#ifndef TASK_LED_H #define TASK_LED_H #include "FREERTOS.h" #include "task.h" #include "FREERTOS.h" #include "queue.h" #include "semphr.h" #include "Cpu.h" extern void vLEDTaskR( void *pvParameters); extern void vLEDTaskG( void *pvParameters); extern void vLEDTaskB( void *pvParameters); #endif
task_led.c
#include "task_led.h" void vLEDTaskR( void *pvParameters) { while (1) { vTaskDelay( 1500); PINS_DRV_TogglePins(PTC, (1<<11)); } } void vLEDTaskG( void *pvParameters) { while (1) { vTaskDelay( 500); PINS_DRV_TogglePins(PTC, (1<<12)); } } void vLEDTaskB( void *pvParameters) { while (1) { vTaskDelay( 1500); PINS_DRV_TogglePins(PTC, (1<<13)); } }
- 编译, debug
- 这里实现了一个rgb交替闪烁, 显示六种颜色的功能