搜索
查看: 2687|回复: 1

[STM32L4+] [Nucleo-L4R5] STM32L4R5 移植ucOS III

[复制链接]

该用户从未签到

35

主题

458

帖子

93

蝴蝶豆

版主

最后登录
2020-9-9
发表于 2018-1-7 21:54:59 | 显示全部楼层 |阅读模式
[Nucleo-L4R5] STM32L4R5外观评测
[Nucleo-L4R5] STM32L4R5低功耗评测
[Nucleo-L4R5] STM32L4R5 CoreMark测试


        CubeMax自带FreeRTOS系统,并且可以通过软件自动生成OS框架,对于初学者来说,一般还是先接触的uCOS的多,所以让L4R5运行一下ucOS是否好玩。
移植的过程就是复制黏贴,加上编译路径后稍微改动一下代码即可,所以就不详细说了,这里主要添加两个User Task和1个软件定时器
创建User任务(STM32中文官网
  1. static  void  App_TaskCreate (void)
  2. {
  3.     OS_ERR err;
  4.     CPU_SR_ALLOC();

  5.     OS_CRITICAL_ENTER();

  6.     OSTaskCreate((OS_TCB         * )&FloatTaskTCB,               
  7.                  (CPU_CHAR        * )"float test task",                 
  8.                  (OS_TASK_PTR )float_task,                        
  9.                  (void                * )0,                                       
  10.                  (OS_PRIO          )FLOAT_TASK_PRIO,            
  11.                  (CPU_STK   * )&FLOAT_TASK_STK[0],        
  12.                  (CPU_STK_SIZE)FLOAT_STK_SIZE/10,        
  13.                  (CPU_STK_SIZE)FLOAT_STK_SIZE,               
  14.                  (OS_MSG_QTY  )0,                                       
  15.                  (OS_TICK          )0,                                       
  16.                  (void           * )0,                                
  17.                  (OS_OPT      )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,
  18.                  (OS_ERR         * )&err);        
  19.                  
  20.     OSTaskCreate((OS_TCB         * )&LEDTaskTCB,               
  21.                  (CPU_CHAR        * )"LED task",                 
  22.                  (OS_TASK_PTR )led_task,                        
  23.                  (void                * )0,                                       
  24.                  (OS_PRIO          )LED_TASK_PRIO,            
  25.                  (CPU_STK   * )&LED_TASK_STK[0],        
  26.                  (CPU_STK_SIZE)LED_STK_SIZE/10,        
  27.                  (CPU_STK_SIZE)LED_STK_SIZE,               
  28.                  (OS_MSG_QTY  )0,                                       
  29.                  (OS_TICK          )0,                                       
  30.                  (void           * )0,                                
  31.                  (OS_OPT      )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,
  32.                  (OS_ERR         * )&err);        
  33.     //OS_TaskSuspend((OS_TCB *)&App_TaskStartTCB, (OS_ERR *)&err);
  34.     OS_CRITICAL_EXIT();        
  35.     OSTaskDel((OS_TCB *)&App_TaskStartTCB, (OS_ERR *)&err);
  36. } //!< End of Create
复制代码


1、浮点运算测试任务
  1. /*
  2. * !brief task for test float point
  3. * !param void *p_arg
  4. * !retval none
  5. */
  6. void float_task(void *p_arg)
  7. {
  8.     OS_ERR err;
  9.     UNUSED(p_arg);
  10.         static float float_num=0.0001;
  11.         while(1)
  12.         {
  13.                 float_num+=0.0001f;
  14.                 ifs_printf("float task runing!\r\n");
  15.                 ifs_printf("float_num inc : %.4f\r\n",float_num);
  16.                 OSTimeDlyHMSM(0,0,1,0,OS_OPT_TIME_HMSM_STRICT,&err);                        //ÑÓʱ500ms
  17.         }
  18. }
复制代码
2、LED翻转任务
  1. /*
  2. * !brief task for test led
  3. * !param void *p_arg
  4. * !retval none
  5. */
  6. void led_task(void *p_arg)
  7. {
  8.     static ifs_uint8_t fsm_blink = 0;
  9.     OS_ERR err;
  10.    
  11.     UNUSED(p_arg);
  12.     while (1) {
  13.         ifs_printf("led task runing!\r\n");
  14.         switch (fsm_blink) {
  15.             case 0:
  16.                 ifs_printf("led 1 on!\r\n");
  17.                 BSP_LED_On(LED1);
  18.                 break;
  19.             case 1:
  20.                 ifs_printf("led 2 on!\r\n");
  21.                 BSP_LED_On(LED2);
  22.                 break;
  23. //            case 2:
  24. //                ifs_printf("led 3 on!\r\n");
  25. //                BSP_LED_On(LED3);
  26. //                break;
  27.             case 2:
  28.                 ifs_printf("led 1 off!\r\n");
  29.                 BSP_LED_Off(LED1);
  30.                 break;
  31.             case 3:
  32.                 ifs_printf("led 2 off!\r\n");
  33.                 BSP_LED_Off(LED2);
  34.                 break;
  35. //            case 5:
  36. //                ifs_printf("led 3 off!\r\n");
  37. //                BSP_LED_Off(LED3);
  38. //                break;
  39.         }
  40.         if (++fsm_blink > 3) fsm_blink = 0;
  41.         OSTimeDlyHMSM(0,0,1,0,OS_OPT_TIME_HMSM_STRICT,&err);
  42.     }
  43. }
复制代码
3、创建一个软件定时器
  1. static  void  App_ObjCreate (void)
  2. {
  3.     OS_ERR err;
  4.     OSTmrCreate((OS_TMR *   )&tmr1,
  5.                 (CPU_CHAR * )"tmr1",
  6.                 (OS_TICK    )2,
  7.                 (OS_TICK    )1000 / OSCfg_TickRate_Hz,
  8.                 (OS_OPT             )OS_OPT_TMR_PERIODIC,
  9.                 (OS_TMR_CALLBACK_PTR)tmr1_callback,
  10.                 (void *             )0,
  11.                 (OS_ERR *           )&err);
  12.     if (err == OS_ERR_NONE) {
  13.         OSTmrStart((OS_TMR *)&tmr1, &err);
  14.     }
  15. }
复制代码
定时器callback函数
  1. static void tmr1_callback(void *p_tmr, void *p_arg)
  2. {
  3.     ifs_printf("tmr1 callback running!\r\n");
  4.     BSP_LED_Toggle(LED3);
  5. }
复制代码
编译后正常运行
ucos.png
PS:代码见以下链接 https://www.stmcu.org.cn/module/forum/thread-614478-1-1.html




回复

使用道具 举报

该用户从未签到

0

主题

1

帖子

0

蝴蝶豆

初级会员

最后登录
2018-2-27
发表于 2018-2-10 10:15:11 | 显示全部楼层
UCOS源码用的是M4内核的3.04那个吗?还是有L4系列专用的源码?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|论坛-意法半导体STM32/STM8技术社区

GMT+8, 2024-4-26 01:10 , Processed in 0.162843 second(s), 37 queries .

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表