3016|3

267

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

【NUCLEO-F410RB】2.给nucleo移植上ucos-ii,用信号量实现led闪烁 [复制链接]

本帖最后由 caizhiwei 于 2015-12-6 17:17 编辑

     虽然管理员寄过来的板子不能用,但是还得完成任务。所以抽出时间把ucos-ii移植上另外一块Nucleo板子上,奉上工程源码,供大家享用~~
  1. int main(void)
  2. {                                    
  3.   
  4.     CPU_INT08U  os_err;
  5. #if (CPU_CFG_NAME_ERR == DEF_ENABLED)
  6.     CPU_ERR     cpu_err;
  7. #endif

  8.     //CPU_Init();

  9.     BSP_IntDisAll();                                            /* Disable all interrupts.                              */

  10.     OSInit();                                                   /* Initialize "uC/OS-II, The Real-Time Kernel"          */

  11.     OSTaskCreateExt((void (*)(void *)) AppTaskStart,            /* Create the start task                                */
  12.                     (void           *) 0,
  13.                     (OS_STK         *)&AppTaskStartStk[APP_CFG_TASK_START_STK_SIZE - 1],
  14.                     (INT8U           ) APP_CFG_TASK_START_PRIO,
  15.                     (INT16U          ) APP_CFG_TASK_START_PRIO,
  16.                     (OS_STK         *)&AppTaskStartStk[0],
  17.                     (INT32U          ) APP_CFG_TASK_START_STK_SIZE,
  18.                     (void           *) 0,
  19.                     (INT16U          )(OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR));

  20. #if (OS_TASK_NAME_EN > 0)
  21.     OSTaskNameSet((INT8U     )APP_CFG_TASK_START_PRIO,
  22.                   (INT8U    *)"Start_Task",
  23.                   (INT8U    *)&os_err);
  24. #endif

  25.     OSStart();                                                  /* Start multitasking (i.e. give control to uC/OS-II)   */

  26.     return (1);
  27. }

  28. /*
  29. *********************************************************************************************************
  30. *                                          STARTUP TASK
  31. *
  32. * Description : This is an example of a startup task.  As mentioned in the book's text, you MUST
  33. *               initialize the ticker only once multitasking has started.
  34. *
  35. * Arguments   : p_arg   is the argument passed to 'AppTaskStart()' by 'OSTaskCreate()'.
  36. *
  37. * Returns     : none
  38. *
  39. * Notes       : 1) The first line of code is used to prevent a compiler warning because 'p_arg' is not
  40. *                  used.  The compiler should not generate any code for this statement.
  41. *********************************************************************************************************
  42. */

  43. void  AppTaskStart (void *p_arg)
  44. {
  45.    (void)p_arg;                                                /* Note #1                                             */


  46.     OS_CPU_SysTickInit(OS_TICKS_PER_SEC);                       /* Initialize tick counter                              */


  47.     Bsp_Init();                                                 /* Initialize BSP functions                             */
  48.     CPU_Init();                                                 /* Initialize the uC/CPU services                       */

  49.     BSP_Tick_Init();                                            /* Start Tick Initialization                            */

  50. #if (OS_TASK_STAT_EN > 0)
  51.     OSStatInit();                                               /* Determine CPU capacity                               */
  52. #endif


  53.    
  54.     AppEventCreate();                                           /* Create Application Events                             */

  55.    
  56.     AppTaskCreate();                                            /* Create application tasks                              */


  57.     while (1)                                                   /* Task body, always written as an infinite loop.       */
  58.                         {                                       
  59.      
  60.               OSSemPost(Led3_SEM);           
  61.               OSTimeDlyHMSM(0, 0,0,800);
  62.         OSSemPost(Led4_SEM);         
  63.                                 
  64.               OSTimeDlyHMSM(0, 0,0,800);   
  65.         
  66.       }
  67. }

  68. /*
  69. *********************************************************************************************************
  70. *                                      AppTaskEventCreate()
  71. *
  72. * Description : Create the application Events
  73. *
  74. * Argument(s) : none.
  75. *
  76. * Return(s)   : none.
  77. *
  78. * Caller(s)   : App_TaskStart()
  79. *
  80. * Note(s)     : none.
  81. *********************************************************************************************************
  82. */
  83. void  AppEventCreate (void)
  84. {               
  85.    Led3_SEM=OSSemCreate(0);        
  86.    Led4_SEM=OSSemCreate(0);
  87.         
  88. }

  89. /*
  90. *********************************************************************************************************
  91. *                                      AppTaskCreate()
  92. *
  93. * Description : Create the application tasks.
  94. *
  95. * Argument(s) : none.
  96. *
  97. * Return(s)   : none.
  98. *
  99. * Caller(s)   : App_TaskStart()
  100. *
  101. * Note(s)     : none.
  102. *********************************************************************************************************
  103. */

  104. void  AppTaskCreate (void)
  105. {
  106. #if (OS_TASK_NAME_EN > 0)
  107.     CPU_INT08U  os_err;
  108. #endif

  109.     OSTaskCreateExt((void (*)(void   *))AppTaskLED3,            /* Create the task for LED3 semaphore blinking          */
  110.                     (void            *) 0,
  111.                     (OS_STK          *)&AppTaskLED3Stk[APP_CFG_TASK_LED3_STK_SIZE - 1],
  112.                     (INT8U            ) APP_CFG_TASK_LED3_PRIO,
  113.                     (INT16U           ) APP_CFG_TASK_LED3_PRIO,
  114.                     (OS_STK          *)&AppTaskLED3Stk[0],
  115.                     (INT32U           ) APP_CFG_TASK_LED3_STK_SIZE,
  116.                     (void            *) 0,
  117.                     (INT16U           )OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);

  118. #if  (OS_TASK_NAME_EN > 0)
  119.      OSTaskNameSet((INT8U   )APP_CFG_TASK_LED3_PRIO,
  120.                    (INT8U  *)"App Task LED3",
  121.                    (INT8U  *)&os_err);
  122. #endif

  123.     OSTaskCreateExt((void (*)(void   *))AppTaskLED4,            /* Task creation for LED 4 queue control with LED 3 too */
  124.                     (void            *) 0,
  125.                     (OS_STK          *)&AppTaskLED4Stk[APP_CFG_TASK_LED4_STK_SIZE - 1],
  126.                     (INT8U            ) APP_CFG_TASK_LED4_PRIO,
  127.                     (INT16U           ) APP_CFG_TASK_LED4_PRIO,
  128.                     (OS_STK          *)&AppTaskLED4Stk[0],
  129.                     (INT32U           ) APP_CFG_TASK_LED4_STK_SIZE,
  130.                     (void            *) 0,
  131.                     (INT16U           ) OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);

  132. #if  (OS_TASK_NAME_EN > 0)
  133.      OSTaskNameSet((INT8U   )APP_CFG_TASK_LED4_PRIO,
  134.                    (INT8U  *)"App Task LED4",
  135.                    (INT8U  *)&os_err);
  136. #endif
  137. }

  138. /*
  139. *********************************************************************************************************
  140. *                                         AppTaskLED3()
  141. *
  142. * Description : Task to activate and toggle LED2 after timer tick system expires.
  143. *
  144. * Argument(s) : p_arg   is the argument passed to 'AppTaskLED2()' by 'OSTaskCreate()'.
  145. *
  146. * Return(s)   : none.
  147. *
  148. * Caller(s)   : none.
  149. *
  150. * Note(s)     : none.
  151. *********************************************************************************************************
  152. */

  153. void  AppTaskLED3(void *p_arg)
  154. {
  155.           CPU_INT08U  err;
  156.     (void)p_arg;

  157.     while(1)
  158.                         {
  159.                          OSSemPend(Led3_SEM,0,&err);                       
  160.        Bsp_Led_On(3);
  161.                          Bsp_Led_Off(4);
  162.        OSTimeDly(500);      
  163.        OSTimeDly(500);
  164.                         }
  165. }

  166. /*
  167. *********************************************************************************************************
  168. *                                         AppTaskLED4()
  169. *
  170. * Description : Toggle LED3 using semaphore services.
  171. *
  172. * Argument(s) : p_arg   is the argument passed to 'AppTaskLED3()' by 'OSTaskCreate()'.
  173. *
  174. * Return(s)   : none.
  175. *
  176. * Caller(s)   : none.
  177. *
  178. * Note(s)     : Calls the LED function to activate LED 3.
  179. *********************************************************************************************************
  180. */

  181. void  AppTaskLED4(void *p_arg)
  182. {
  183.           CPU_INT08U  err;
  184.     (void)p_arg;

  185.     while (1)
  186.                         {
  187.                                 OSSemPend(Led4_SEM,0,&err);                     
  188.         Bsp_Led_On(4);
  189.                                 Bsp_Led_Off(3);
  190.         OSTimeDly(500);
  191.         OSTimeDly(500);
  192.                   }
  193. }
复制代码
哈哈,,用MDK5编译的哦!


最后附上源代码:
f030r8_ucosii_demo.zip (2.22 MB, 下载次数: 8)

此帖出自stm32/stm8论坛

最新回复

非常感谢分享  详情 回复 发表于 2018-12-1 16:38
点赞 关注(1)
个人签名

gitee/casy

 

回复
举报

1158

帖子

2

TA的资源

版主

沙发
 
66666点赞!
此帖出自stm32/stm8论坛
 
 

回复

191

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
谢谢分享。。。
此帖出自stm32/stm8论坛
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

4
 
非常感谢分享
此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表