MM32软件]【灵动微电子MM32F5330测评】4.移植FreeRTOS

FreeRTOS是一个实时操作系统,适用于微控制器和微处理器,使小型低功耗设备的编程变得更容易。下载的例程里没有FreeRTOS的例程需要自己移植,先下载FreeRTOS核心源码 https://github.com/FreeRTOS/FreeRTOS-Kernel/releases
创建一个FreeRTOS的文件夹
 


打开下载的FreeRTOS核心源码,将FreeRTOS-KernelV11.1.0的全部文件解压到刚才创建的FreeRTOS文件夹
 


在Keil中创建FreeRTOS分组,将FreeRTOS文件夹下的.c文件添加到分组中
 


FreeRTOS官方还没有对STAR-MC1核心进行适配,这里选择CM33,因为官方也没有介绍说有TrustZone所以选择ARM_CM33_NTZ,将portable\GCC\ARM_CM33_NTZ\non_secure中的port.c和portasm.c添加到分组中
 


还需要添加MemMang中的内存管理代码,这里有5个
 


打开那个readme看看
 


这里使用heap4.c就行,把它添加到工程中,然后添加FreeRTOS的头文件路径
 


其他用不到的文件和文件夹就可以删掉了,在FreeRTOS的官方例程里复制1个FreeRTOSConfig.h文件到代码文件夹(我用的CORTEX_MPU_M33F_NTZ_Nordic_NRF9160_SES这个例程),最后结构是这样
 


修改一下FreeRTOSConfig.h内容,修改下面几个宏定义
 


 


 


注意一下如果你的项目已经实现了SVCall_Handler、PendSV_Handler、SysTick_Handler需要将它们删掉,后面由FreeRTOS来接管,接下来创建FreeRTOS任务,两个LED以不同速度闪烁的任务和一个定时通过串口打印的任务,LED初始化、串口初始化和printf重定向到串口的代码就不放了,之前的帖子里都有

复制

static TaskHandle_t led1_task_handler = NULL;

static TaskHandle_t led2_task_handler = NULL;

static TaskHandle_t printf_task_handler = NULL;

static void Led1Task(void* pvParameters)

{    

    while (1)

    {

        led_toggle(LED_NO_1);

        vTaskDelay(200);

    }

}



static void Led2Task(void* pvParameters)

{    

    while (1)

    {

        led_toggle(LED_NO_2);

        vTaskDelay(500);

    }

}

static void PrintfTask(void* pvParameters)

{    

    uint8_t i = 0;

    while (1)

    {

        vTaskDelay(1000);

        i+=1;

        printf("PrintfTask i = %d\n",i);

    }

}



int main(void)

{

    uart_init();

    led_init();

    printf("MM32F5330 FreeRTOS\n");

    xTaskCreate(Led1Task, "Led1Task", configMINIMAL_STACK_SIZE,  NULL,1, &led1_task_handler);

    xTaskCreate(Led2Task, "Led2Task", configMINIMAL_STACK_SIZE,  NULL,1, &led2_task_handler);

    xTaskCreate(PrintfTask, "PrintfTask", configMINIMAL_STACK_SIZE,  NULL,1, &printf_task_handler);

    vTaskStartScheduler();

    while (1)

    {

    }

}


LED任务运行效果
 


Printf任务运行效果

---------------------
作者:yuyy1989
链接:https://bbs.21ic.com/icview-3385446-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值