DEVKIT-mpc5744p配置rtos

DEVKIT-mpc5744p配置rtos

软件:S32 Design Studio for Power Architecture Version 2.1
新建工程,配置与生成代码
ref: 野火 《FreeRTOS 内核实现与应用开发实战—基于STM32》
可在野火大学堂下载 或 下载链接
本文代码供参考

配置

  1. component library中双击添加rtos模块
    在这里插入图片描述
  2. 再在components中双击这个模块,进入配置界面,完成配置
    在这里插入图片描述
  3. 配置3个led接口为输出
    在这里插入图片描述
  4. ctrl+s保存, 生成代码
    在这里插入图片描述
  5. 添加Task/task_start.c task_start.h task_led.c task_led.h (可在别的地方创建, 拖进工程文件夹)
    在这里插入图片描述
  6. 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();
    
  7. 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
    
  8. 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();
    }
    
  9. 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
    
  10. 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));
    }
    }
    
  11. 编译, debug
  12. 这里实现了一个rgb交替闪烁, 显示六种颜色的功能
    在这里插入图片描述
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值