久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2763|回復: 0
打印 上一主題 下一主題
收起左側

基于UCOSII的STM32源程序(信號量)

[復制鏈接]
跳轉到指定樓層
樓主
ID:411722 發表于 2018-10-19 10:41 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
此文件適合于STM32上移植UCOSII系統,通過信號量的方法創建程序,完成3個LED燈的閃爍。

單片機源程序如下:
  1. /****************************************************************************
  2. *
  3. * 本例程在 奮斗版STM32開發板V2,2.1,V3,MINI上調試通過           
  4. *
  5. * 文件名: app.c
  6. * 內容簡述:
  7. *       本例程操作系統采用ucos2.86a版本, 建立了4個任務
  8.                         任務名                                                                                         優先級
  9.                         APP_TASK_START_PRIO                               2                主任務                         
  10.             Task_Led1_PRIO                                    7                        LED1 閃爍任務
  11.             Task_Led2_PRIO                                    8                        LED2 閃爍任務
  12.             Task_Led3_PRIO                                    9                        LED3 閃爍任務
  13.                  當然還包含了系統任務:
  14.                     OS_TaskIdle                  空閑任務-----------------優先級最低
  15.                         OS_TaskStat                  統計運行時間的任務-------優先級次低
  16.   通過建立3個信號量,通過主任務的延時發送,控制3個led閃爍任務的響應
  17. *
  18. * 文件歷史:
  19. * 版本號  日期       作者    說明
  20. * v0.1    2012-11-08 sun68  創建該文件
  21. *
  22. */

  23. /*
  24. *********************************************************************************************************
  25. *                                             INCLUDE FILES
  26. *********************************************************************************************************
  27. */
  28. #define GLOBALS

  29. #include "stdarg.h"

  30. #include "includes.h"
  31. #include "globals.h"

  32. OS_EVENT* Led1_SEM;
  33. OS_EVENT* Led2_SEM;
  34. OS_EVENT* Led3_SEM;

  35. /*
  36. *********************************************************************************************************
  37. *                                            LOCAL DEFINES
  38. *********************************************************************************************************
  39. */



  40. /*
  41. *********************************************************************************************************
  42. *                                       LOCAL GLOBAL VARIABLES
  43. *********************************************************************************************************
  44. */

  45. static  OS_STK App_TaskStartStk[APP_TASK_START_STK_SIZE];

  46. static  OS_STK Task_Led1Stk[Task_Led1_STK_SIZE];
  47. static  OS_STK Task_Led2Stk[Task_Led2_STK_SIZE];
  48. static  OS_STK Task_Led3Stk[Task_Led3_STK_SIZE];
  49.                

  50. /*
  51. *********************************************************************************************************
  52. *                                      LOCAL FUNCTION PROTOTYPES
  53. *********************************************************************************************************
  54. */
  55. static  void App_TaskCreate(void);

  56. static  void App_TaskStart(void* p_arg);

  57. static  void Task_Led1(void* p_arg);
  58. static  void Task_Led2(void* p_arg);
  59. static  void Task_Led3(void* p_arg);


  60. #define LED_LED1_ON()   GPIO_SetBits(GPIOB, GPIO_Pin_5 );                 //LED1  亮
  61. #define LED_LED1_OFF()  GPIO_ResetBits(GPIOB, GPIO_Pin_5 );            //LED1  滅

  62. #define LED_LED2_ON()   GPIO_SetBits(GPIOD, GPIO_Pin_6 );                 //LED2  亮
  63. #define LED_LED2_OFF()  GPIO_ResetBits(GPIOD, GPIO_Pin_6 );            //LED2  滅

  64. #define LED_LED3_ON()   GPIO_SetBits(GPIOD, GPIO_Pin_3 );                 //LED3  亮
  65. #define LED_LED3_OFF()  GPIO_ResetBits(GPIOD, GPIO_Pin_3 );            //LED3  滅
  66. /*
  67. *********************************************************************************************************
  68. *                                                main()
  69. *
  70. * Description : This is the standard entry point for C code.  It is assumed that your code will call
  71. *               main() once you have performed all necessary initialization.
  72. *
  73. * Argument : none.
  74. *
  75. * Return   : none.
  76. *********************************************************************************************************
  77. */

  78. int main(void)
  79. {
  80.    CPU_INT08U os_err;

  81.    //禁止CPU中斷
  82.    CPU_IntDis();
  83.    
  84.    //UCOS 初始化
  85.    OSInit();                                                   /* Initialize "uC/OS-II, The Real-Time Kernel".         */
  86.    
  87.    //硬件平臺初始化
  88.    BSP_Init();                                                 /* Initialize BSP functions.  */
  89.    
  90.     //建立主任務, 優先級最高  建立這個任務另外一個用途是為了以后使用統計任務
  91.    os_err = OSTaskCreate((void (*) (void *)) App_TaskStart,                                            //指向任務代碼的指針
  92.                           (void *) 0,                                                                                  //任務開始執行時,傳遞給任務的參數的指針
  93.                (OS_STK *) &App_TaskStartStk[APP_TASK_START_STK_SIZE - 1],        //分配給任務的堆棧的棧頂指針   從頂向下遞減
  94.                (INT8U) APP_TASK_START_PRIO);                                                                //分配給任務的優先級
  95.    
  96.    //ucos的節拍計數器清0    節拍計數器是0-4294967295    對于節拍頻率100hz時, 每隔497天就重新計數
  97.    OSTimeSet(0);
  98.    OSStart();                                                  /* Start multitasking (i.e. give control to uC/OS-II).  */
  99.                                                  /* Start multitasking (i.e. give control to uC/OS-II).  */

  100.    return (0);
  101. }




  102. /*
  103. *********************************************************************************************************
  104. *                                          App_TaskStart()
  105. *
  106. * Description : The startup task.  The uC/OS-II ticker should only be initialize once multitasking starts.
  107. *
  108. * Argument : p_arg       Argument passed to 'App_TaskStart()' by 'OSTaskCreate()'.
  109. *
  110. * Return   : none.
  111. *
  112. * Caller   : This is a task.
  113. *
  114. * Note     : none.
  115. *********************************************************************************************************
  116. */

  117. static  void App_TaskStart(void* p_arg)
  118. {
  119.    


  120.    (void) p_arg;

  121.    //初始化ucos時鐘節拍
  122.    OS_CPU_SysTickInit();                                       /* Initialize the SysTick.       */

  123. //使能ucos 的統計任務
  124. #if (OS_TASK_STAT_EN > 0)
  125.    //----統計任務初始化函數  
  126.    OSStatInit();                                               /* Determine CPU capacity.                              */
  127. #endif
  128.    //建立其他的任務
  129.    App_TaskCreate();

  130.    while (1)
  131.    {
  132.       //1秒一次循環
  133.           OSSemPost(Led1_SEM);           
  134.           OSTimeDlyHMSM(0, 0,0, 300);
  135.           OSSemPost(Led2_SEM);           
  136.           OSTimeDlyHMSM(0, 0,0, 500);
  137.           OSSemPost(Led3_SEM);           
  138.           OSTimeDlyHMSM(0, 0,0,350);

  139.    }
  140. }


  141. //LED1閃爍任務----------------------------------------
  142. static  void Task_Led1(void* p_arg)
  143. {
  144.    INT8U err;
  145.    (void) p_arg;            
  146.    while (1)
  147.    {
  148.       OSSemPend(Led1_SEM,0,&err);                            //等待Led1信號量  
  149.           LED_LED1_ON();        
  150.       LED_LED2_OFF();
  151.           LED_LED3_OFF();           
  152.           OSTimeDlyHMSM(0, 0,0, 200);  
  153.    }
  154. }

  155. //LED2閃爍任務----------------------------------------
  156. static  void Task_Led2(void* p_arg)
  157. {
  158.    

  159.    INT8U err;
  160.    (void) p_arg;            
  161.    while (1)
  162.    {
  163.       
  164.           OSSemPend(Led2_SEM,0,&err);                            //等待Led2信號量  
  165.           LED_LED2_ON();        
  166.       LED_LED1_OFF();
  167.           LED_LED3_OFF();
  168.           OSTimeDlyHMSM(0, 0,0, 300);  
  169.    }
  170. }

  171. //LED3閃爍任務----------------------------------------
  172. static  void Task_Led3(void* p_arg)
  173. {  INT8U  err;
  174.    (void) p_arg;            
  175.    while (1)
  176.    {
  177.       OSSemPend(Led3_SEM,0,&err);                            //等待Led3信號量  
  178.           LED_LED3_ON();        
  179.       LED_LED1_OFF();
  180.           LED_LED2_OFF();
  181.           OSTimeDlyHMSM(0, 0,0,200);  
  182.    }
  183. }
  184. /*
  185. *********************************************************************************************************
  186. *                                            App_TaskCreate()
  187. *
  188. * Description : Create the application tasks.
  189. *
  190. * Argument : none.
  191. *
  192. * Return   : none.
  193. *
  194. * Caller   : App_TaskStart().
  195. *
  196. * Note     : none.
  197. *********************************************************************************************************
  198. */

  199. static  void App_TaskCreate(void)
  200. {
  201.    //CPU_INT08U os_err;

  202.    Led1_SEM=OSSemCreate(1);                                 //建立Led1的信號量
  203.    Led2_SEM=OSSemCreate(1);                                 //建立Led2的信號量
  204.    Led3_SEM=OSSemCreate(1);                                 //建立Led3的信號量

  205.                
  206.    //LED1 閃爍任務------------------------------------------------------
  207.    OSTaskCreateExt(Task_Led1,(void *)0,(OS_STK *)&Task_Led1Stk[Task_Led1_STK_SIZE-1],Task_Led1_PRIO,Task_Led1_PRIO,(OS_STK *)&Task_Led1Stk[0],
  208.                     Task_Led1_STK_SIZE,
  209.                     (void *)0,
  210.                     OS_TASK_OPT_STK_CHK|OS_TASK_OPT_STK_CLR);
  211.    
  212.    //LED2 閃爍任務------------------------------------------------------
  213.    OSTaskCreateExt(Task_Led2,(void *)0,(OS_STK *)&Task_Led2Stk[Task_Led2_STK_SIZE-1],Task_Led2_PRIO,Task_Led2_PRIO,(OS_STK *)&Task_Led2Stk[0],
  214.                     Task_Led2_STK_SIZE,
  215.                     (void *)0,
  216.                     OS_TASK_OPT_STK_CHK|OS_TASK_OPT_STK_CLR);
  217.    
  218.    //LED3 閃爍任務------------------------------------------------------
  219.    OSTaskCreateExt(Task_Led3,(void *)0,(OS_STK *)&Task_Led3Stk[Task_Led3_STK_SIZE-1],Task_Led3_PRIO,Task_Led3_PRIO,(OS_STK *)&Task_Led3Stk[0],
  220.                     Task_Led3_STK_SIZE,
  221.                     (void *)0,
  222.                     OS_TASK_OPT_STK_CHK|OS_TASK_OPT_STK_CLR);  

  223.   
  224.    
  225. }

  226. /*
  227. *********************************************************************************************************
  228. *********************************************************************************************************
  229. *                                          uC/OS-II APP HOOKS
  230. *********************************************************************************************************
  231. *********************************************************************************************************
  232. */

  233. #if (OS_APP_HOOKS_EN > 0)
  234. /*
  235. *********************************************************************************************************
  236. *                                      TASK CREATION HOOK (APPLICATION)
  237. *
  238. * Description : This function is called when a task is created.
  239. *
  240. * Argument : ptcb   is a pointer to the task control block of the task being created.
  241. *
  242. * Note     : (1) Interrupts are disabled during this call.
  243. *********************************************************************************************************
  244. */

  245. void App_TaskCreateHook(OS_TCB* ptcb)
  246. {
  247. }

  248. /*
  249. *********************************************************************************************************
  250. *                                    TASK DELETION HOOK (APPLICATION)
  251. *
  252. * Description : This function is called when a task is deleted.
  253. *
  254. * Argument : ptcb   is a pointer to the task control block of the task being deleted.
  255. *
  256. * Note     : (1) Interrupts are disabled during this call.
  257. *********************************************************************************************************
  258. */

  259. void App_TaskDelHook(OS_TCB* ptcb)
  260. {
  261.    (void) ptcb;
  262. }

  263. /*
  264. *********************************************************************************************************
  265. *                                      IDLE TASK HOOK (APPLICATION)
  266. *
  267. * Description : This function is called by OSTaskIdleHook(), which is called by the idle task.  This hook
  268. *               has been added to allow you to do such things as STOP the CPU to conserve power.
  269. *
  270. * Argument : none.
  271. *
  272. * Note     : (1) Interrupts are enabled during this call.
  273. *********************************************************************************************************
  274. */

  275. #if OS_VERSION >= 251
  276. void App_TaskIdleHook(void)
  277. {
  278. }
  279. #endif

  280. /*
  281. *********************************************************************************************************
  282. *                                        STATISTIC TASK HOOK (APPLICATION)
  283. *
  284. * Description : This function is called by OSTaskStatHook(), which is called every second by uC/OS-II's
  285. *               statistics task.  This allows your application to add functionality to the statistics task.
  286. *
  287. * Argument : none.
  288. *********************************************************************************************************
  289. */

  290. void App_TaskStatHook(void)
  291. {
  292. }

  293. /*
  294. *********************************************************************************************************
  295. *                                        TASK SWITCH HOOK (APPLICATION)
  296. *
  297. * Description : This function is called when a task switch is performed.  This allows you to perform other
  298. *               operations during a context switch.
  299. *
  300. * Argument : none.
  301. *
  302. * Note     : 1 Interrupts are disabled during this call.
  303. *
  304. *            2  It is assumed that the global pointer 'OSTCBHighRdy' points to the TCB of the task that
  305. *                   will be 'switched in' (i.e. the highest priority task) and, 'OSTCBCur' points to the
  306. *                  task being switched out (i.e. the preempted task).
  307. *********************************************************************************************************
  308. */

  309. #if OS_TASK_SW_HOOK_EN > 0
  310. void App_TaskSwHook(void)
  311. {
  312. }
  313. #endif

  314. /*
  315. *********************************************************************************************************
  316. *                                     OS_TCBInit() HOOK (APPLICATION)
  317. *
  318. * Description : This function is called by OSTCBInitHook(), which is called by OS_TCBInit() after setting
  319. *               up most of the TCB.
  320. *
  321. * Argument : ptcb    is a pointer to the TCB of the task being created.
  322. *
  323. * Note     : (1) Interrupts may or may not be ENABLED during this call.
  324. *********************************************************************************************************
  325. */

  326. #if OS_VERSION >= 204
  327. void App_TCBInitHook(OS_TCB* ptcb)
  328. {
  329.    (void) ptcb;
  330. }
  331. #endif

  332. #endif
復制代碼

所有資料51hei提供下載:
STM32-LED閃爍-信號量.rar (382.15 KB, 下載次數: 21)


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲国产精品第一区二区 | 成人在线视频免费看 | 亚洲精品成人在线 | 日日夜夜天天久久 | 在线观看成人 | 久久91av| 玖玖综合在线 | 国产一区999 | 久久综合av | 亚洲激情在线观看 | 天堂久久天堂综合色 | 国产成人精品999在线观看 | 色啪网 | 黄色网址在线免费观看 | 在线精品亚洲欧美日韩国产 | 成人在线精品 | 亚洲欧美另类在线观看 | 欧美综合一区二区 | 久久久久久亚洲 | 日本三级视频 | 综合久久久 | 亚洲欧美日韩精品久久亚洲区 | 天天碰夜夜操 | 久久久xxx| 免费在线黄色av | 黄色一级免费看 | 一区二区三区视频 | 啪啪综合网 | 日本精品一区二区三区四区 | av黄色片 | 不卡一区二区在线观看 | 国产精品视频在线播放 | 欧美区日韩区 | 天天久久| 国产xxxx在线 | 亚洲视频在线观看 | 毛片在线视频 | 一区二区中文字幕 | 国产中文字幕在线观看 | 久久99成人| 日韩一区二区在线免费观看 |