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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4887|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

stm32單片機ucosiii例程分享

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:386406 發(fā)表于 2018-8-15 09:23 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
這是32單片機ucosiii一部分源碼


所有資料51hei提供下載:
2-ucosiii例程.7z (1.18 MB, 下載次數(shù): 89)



其中一個單片機源程序如下:
  1. /*
  2. *********************************************************************************************************
  3. *                                              EXAMPLE CODE
  4. *
  5. *                             (c) Copyright 2013; Micrium, Inc.; Weston, FL
  6. *
  7. *                   All rights reserved.  Protected by international copyright laws.
  8. *                   Knowledge of the source code may not be used to write a similar
  9. *                   product.  This file may only be used in accordance with a license
  10. *                   and should not be redistributed in any way.
  11. *********************************************************************************************************
  12. */

  13. /*
  14. *********************************************************************************************************
  15. *
  16. *                                            EXAMPLE CODE
  17. *
  18. *                                       IAR Development Kits
  19. *                                              on the
  20. *
  21. *                                    STM32F429II-SK KICKSTART KIT
  22. *
  23. * Filename      : app.c
  24. * Version       : V1.00
  25. * Programmer(s) : YS
  26. *                 DC
  27. *********************************************************************************************************
  28. */

  29. /*
  30. *********************************************************************************************************
  31. *                                             INCLUDE FILES
  32. *********************************************************************************************************
  33. */

  34. #include <includes.h>


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

  40. OS_SEM SemOfKey;          //標(biāo)志KEY1是否被單擊的多值信號量


  41. /*
  42. *********************************************************************************************************
  43. *                                                 TCB
  44. *********************************************************************************************************
  45. */

  46. static  OS_TCB   AppTaskStartTCB;                                //任務(wù)控制塊

  47. static  OS_TCB   AppTaskKeyTCB;
  48. static  OS_TCB   AppTaskLed1TCB;


  49. /*
  50. *********************************************************************************************************
  51. *                                                STACKS
  52. *********************************************************************************************************
  53. */

  54. static  CPU_STK  AppTaskStartStk[APP_TASK_START_STK_SIZE];       //任務(wù)堆棧

  55. static  CPU_STK  AppTaskKeyStk [ APP_TASK_KEY_STK_SIZE ];
  56. static  CPU_STK  AppTaskLed1Stk [ APP_TASK_LED1_STK_SIZE ];


  57. /*
  58. *********************************************************************************************************
  59. *                                         FUNCTION PROTOTYPES
  60. *********************************************************************************************************
  61. */

  62. static  void  AppTaskStart  (void *p_arg);                       //任務(wù)函數(shù)聲明

  63. static  void  AppTaskKey  ( void * p_arg );
  64. static  void  AppTaskLed1 ( void * p_arg );


  65. /*
  66. *********************************************************************************************************
  67. *                                                main()
  68. *
  69. * Description : This is the standard entry point for C code.  It is assumed that your code will call
  70. *               main() once you have performed all necessary initialization.
  71. *
  72. * Arguments   : none
  73. *
  74. * Returns     : none
  75. *********************************************************************************************************
  76. */

  77. int  main (void)
  78. {
  79.     OS_ERR  err;


  80.     OSInit(&err);                                                           //初始化 uC/OS-III

  81.           /* 創(chuàng)建起始任務(wù) */
  82.     OSTaskCreate((OS_TCB     *)&AppTaskStartTCB,                            //任務(wù)控制塊地址
  83.                  (CPU_CHAR   *)"App Task Start",                            //任務(wù)名稱
  84.                  (OS_TASK_PTR ) AppTaskStart,                               //任務(wù)函數(shù)
  85.                  (void       *) 0,                                          //傳遞給任務(wù)函數(shù)(形參p_arg)的實參
  86.                  (OS_PRIO     ) APP_TASK_START_PRIO,                        //任務(wù)的優(yōu)先級
  87.                  (CPU_STK    *)&AppTaskStartStk[0],                         //任務(wù)堆棧的基地址
  88.                  (CPU_STK_SIZE) APP_TASK_START_STK_SIZE / 10,               //任務(wù)堆棧空間剩下1/10時限制其增長
  89.                  (CPU_STK_SIZE) APP_TASK_START_STK_SIZE,                    //任務(wù)堆棧空間(單位:sizeof(CPU_STK))
  90.                  (OS_MSG_QTY  ) 5u,                                         //任務(wù)可接收的最大消息數(shù)
  91.                  (OS_TICK     ) 0u,                                         //任務(wù)的時間片節(jié)拍數(shù)(0表默認值OSCfg_TickRate_Hz/10)
  92.                  (void       *) 0,                                          //任務(wù)擴展(0表不擴展)
  93.                  (OS_OPT      )(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR), //任務(wù)選項
  94.                  (OS_ERR     *)&err);                                       //返回錯誤類型

  95.     OSStart(&err);                                                          //啟動多任務(wù)管理(交由uC/OS-III控制)

  96. }


  97. /*
  98. *********************************************************************************************************
  99. *                                          STARTUP TASK
  100. *
  101. * Description : This is an example of a startup task.  As mentioned in the book's text, you MUST
  102. *               initialize the ticker only once multitasking has started.
  103. *
  104. * Arguments   : p_arg   is the argument passed to 'AppTaskStart()' by 'OSTaskCreate()'.
  105. *
  106. * Returns     : none
  107. *
  108. * Notes       : 1) The first line of code is used to prevent a compiler warning because 'p_arg' is not
  109. *                  used.  The compiler should not generate any code for this statement.
  110. *********************************************************************************************************
  111. */

  112. static  void  AppTaskStart (void *p_arg)
  113. {
  114.     CPU_INT32U  cpu_clk_freq;
  115.     CPU_INT32U  cnts;
  116.     OS_ERR      err;


  117.    (void)p_arg;

  118.     BSP_Init();                                                 //板級初始化
  119.     CPU_Init();                                                 //初始化 CPU 組件(時間戳、關(guān)中斷時間測量和主機名)

  120.     cpu_clk_freq = BSP_CPU_ClkFreq();                           //獲取 CPU 內(nèi)核時鐘頻率(SysTick 工作時鐘)
  121.     cnts = cpu_clk_freq / (CPU_INT32U)OSCfg_TickRate_Hz;        //根據(jù)用戶設(shè)定的時鐘節(jié)拍頻率計算 SysTick 定時器的計數(shù)值
  122.     OS_CPU_SysTickInit(cnts);                                   //調(diào)用 SysTick 初始化函數(shù),設(shè)置定時器計數(shù)值和啟動定時器

  123.     Mem_Init();                                                 //初始化內(nèi)存管理組件(堆內(nèi)存池和內(nèi)存池表)

  124. #if OS_CFG_STAT_TASK_EN > 0u                                    //如果使能(默認使能)了統(tǒng)計任務(wù)
  125.     OSStatTaskCPUUsageInit(&err);                               //計算沒有應(yīng)用任務(wù)(只有空閑任務(wù))運行時 CPU 的(最大)
  126. #endif                                                          //容量(決定 OS_Stat_IdleCtrMax 的值,為后面計算 CPU
  127.                                                                 //使用率使用)。
  128. #ifdef CPU_CFG_INT_DIS_MEAS_EN
  129.     CPU_IntDisMeasMaxCurReset();                                //復(fù)位(清零)當(dāng)前最大關(guān)中斷時間
  130. #endif

  131.    
  132.                 /* 創(chuàng)建多值信號量 SemOfKey */
  133.     OSSemCreate((OS_SEM      *)&SemOfKey,    //指向信號量變量的指針
  134.                (CPU_CHAR    *)"SemOfKey",    //信號量的名字
  135.                (OS_SEM_CTR   )0,             //信號量這里是指示事件發(fā)生,所以賦值為0,表示事件還沒有發(fā)生
  136.                (OS_ERR      *)&err);         //錯誤類型
  137.                                                          

  138.                 /* 創(chuàng)建 AppTaskKey 任務(wù) */
  139.     OSTaskCreate((OS_TCB     *)&AppTaskKeyTCB,                              //任務(wù)控制塊地址
  140.                  (CPU_CHAR   *)"App Task Key",                              //任務(wù)名稱
  141.                  (OS_TASK_PTR ) AppTaskKey,                                 //任務(wù)函數(shù)
  142.                  (void       *) 0,                                          //傳遞給任務(wù)函數(shù)(形參p_arg)的實參
  143.                  (OS_PRIO     ) APP_TASK_KEY_PRIO,                          //任務(wù)的優(yōu)先級
  144.                  (CPU_STK    *)&AppTaskKeyStk[0],                           //任務(wù)堆棧的基地址
  145.                  (CPU_STK_SIZE) APP_TASK_KEY_STK_SIZE / 10,                 //任務(wù)堆棧空間剩下1/10時限制其增長
  146.                  (CPU_STK_SIZE) APP_TASK_KEY_STK_SIZE,                      //任務(wù)堆棧空間(單位:sizeof(CPU_STK))
  147.                  (OS_MSG_QTY  ) 5u,                                         //任務(wù)可接收的最大消息數(shù)
  148.                  (OS_TICK     ) 0u,                                         //任務(wù)的時間片節(jié)拍數(shù)(0表默認值OSCfg_TickRate_Hz/10)
  149.                  (void       *) 0,                                          //任務(wù)擴展(0表不擴展)
  150.                  (OS_OPT      )(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR), //任務(wù)選項
  151.                  (OS_ERR     *)&err);                                       //返回錯誤類型
  152.    
  153.                 /* 創(chuàng)建 LED1 任務(wù) */
  154.     OSTaskCreate((OS_TCB     *)&AppTaskLed1TCB,                             //任務(wù)控制塊地址
  155.                  (CPU_CHAR   *)"App Task Led1",                             //任務(wù)名稱
  156.                  (OS_TASK_PTR ) AppTaskLed1,                                //任務(wù)函數(shù)
  157.                  (void       *) 0,                                          //傳遞給任務(wù)函數(shù)(形參p_arg)的實參
  158.                  (OS_PRIO     ) APP_TASK_LED1_PRIO,                         //任務(wù)的優(yōu)先級
  159.                  (CPU_STK    *)&AppTaskLed1Stk[0],                          //任務(wù)堆棧的基地址
  160.                  (CPU_STK_SIZE) APP_TASK_LED1_STK_SIZE / 10,                //任務(wù)堆棧空間剩下1/10時限制其增長
  161.                  (CPU_STK_SIZE) APP_TASK_LED1_STK_SIZE,                     //任務(wù)堆棧空間(單位:sizeof(CPU_STK))
  162.                  (OS_MSG_QTY  ) 5u,                                         //任務(wù)可接收的最大消息數(shù)
  163.                  (OS_TICK     ) 0u,                                         //任務(wù)的時間片節(jié)拍數(shù)(0表默認值OSCfg_TickRate_Hz/10)
  164.                  (void       *) 0,                                          //任務(wù)擴展(0表不擴展)
  165.                  (OS_OPT      )(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR), //任務(wù)選項
  166.                  (OS_ERR     *)&err);                                       //返回錯誤類型
  167.                
  168.                 OSTaskDel ( & AppTaskStartTCB, & err );                     //刪除起始任務(wù)本身,該任務(wù)不再運行
  169.                
  170.                
  171. }


  172. /*
  173. *********************************************************************************************************
  174. *                                          KEY TASK
  175. *********************************************************************************************************
  176. */
  177. static  void  AppTaskKey ( void * p_arg )
  178. {
  179.         OS_ERR      err;

  180.         uint8_t ucKey1Press = 0;
  181.         
  182.         
  183.         (void)p_arg;

  184.                                          
  185.         while (DEF_TRUE) {                                                         //任務(wù)體
  186.                 if( Key_Scan ( macKEY1_GPIO_PORT, macKEY1_GPIO_PIN, 1, & ucKey1Press ) ) //如果KEY1被單擊
  187.                   OSSemPost((OS_SEM  *)&SemOfKey,                                        //發(fā)布SemOfKey
  188.                                                          (OS_OPT   )OS_OPT_POST_ALL,                                   //發(fā)布給所有等待任務(wù)
  189.                                                          (OS_ERR  *)&err);                                             //返回錯誤類型

  190.                 OSTimeDlyHMSM ( 0, 0, 0, 20, OS_OPT_TIME_DLY, & err );                   //每20ms掃描一次
  191.                
  192.         }
  193.         
  194. }


  195. /*
  196. *********************************************************************************************************
  197. *                                          LED1 TASK
  198. *********************************************************************************************************
  199. */

  200. static  void  AppTaskLed1 ( void * p_arg )
  201. {
  202.     OS_ERR         err;
  203.           CPU_INT32U     cpu_clk_freq;
  204.           CPU_TS         ts_sem_post, ts_sem_get;
  205.                 CPU_SR_ALLOC();  //使用到臨界段(在關(guān)/開中斷時)時必需該宏,該宏聲明和定義一個局部變
  206.                                                                                  //量,用于保存關(guān)中斷前的 CPU 狀態(tài)寄存器 SR(臨界段關(guān)中斷只需保存SR)
  207.                                                                                  //,開中斷時將該值還原。
  208.     (void)p_arg;


  209.           cpu_clk_freq = BSP_CPU_ClkFreq();               //獲取CPU時鐘,時間戳是以該時鐘計數(shù)
  210.         
  211.         
  212.     while (DEF_TRUE) {                              //任務(wù)體
  213.                                        
  214.                         OSSemPend ((OS_SEM   *)&SemOfKey,             //等待該信號量被發(fā)布
  215.                                                                  (OS_TICK   )0,                     //無期限等待
  216.                                                                  (OS_OPT    )OS_OPT_PEND_BLOCKING,  //如果沒有信號量可用就等待
  217.                                                                  (CPU_TS   *)&ts_sem_post,          //獲取信號量最后一次被發(fā)布的時間戳
  218.                                                                  (OS_ERR   *)&err);                 //返回錯誤類型
  219.                                 
  220.                         ts_sem_get = OS_TS_GET();                     //獲取解除等待時的時間戳
  221.                                 
  222.                         macLED1_TOGGLE ();                            //切換LED1的亮滅狀態(tài)
  223.                                 
  224.                         OS_CRITICAL_ENTER();                          //進入臨界段,不希望下面串口打印遭到中斷
  225.                         
  226.                         printf ( "\r\n發(fā)布信號量的時間戳是%d", ts_sem_post );
  227.                         printf ( "\r\n解除等待狀態(tài)的時間戳是%d", ts_sem_get );
  228.                         printf ( "\r\n接收到信號量與發(fā)布信號量的時間相差%dus\r\n",
  229.                                 ( ts_sem_get - ts_sem_post ) / ( cpu_clk_freq / 1000000 ) );
  230.                         
  231.                         OS_CRITICAL_EXIT();

  232.     }
  233.                
  234.                
  235. }
復(fù)制代碼



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

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲免费视频一区 | 免费看的av | 福利一区二区在线 | 亚州一区二区三区 | 中文字幕日韩一区 | 国产精品日韩在线 | 欧美激情精品久久久久久免费 | www.亚洲成人网 | 国产欧美精品一区二区三区 | 天天干国产 | 日韩av美女电影 | 国产精品观看 | 日本人爽p大片免费看 | 羞羞涩涩在线观看 | 成人av电影免费在线观看 | 国产免费拔擦拔擦8x高清 | 国产精品免费一区二区三区四区 | 久久国产精品久久久久久久久久 | 久久精品91久久久久久再现 | 亚洲精品久久久久久久久久久久久 | 国产精品免费在线 | 九九热精品在线视频 | 一区二区国产在线 | 国产精品久久久久久久久免费相片 | 精品久久久久久亚洲精品 | 日韩一级| 午夜日韩精品 | 国产精品国产三级国产播12软件 | 日韩视频观看 | 久草资源网站 | 国产午夜精品视频 | 欧美日韩在线视频一区二区 | 一区二区免费高清视频 | 日本精品久久久久久久 | 色播99 | 综合久久99| 日韩精品1区2区3区 成人黄页在线观看 | 久久精品视频亚洲 | 国产成人aⅴ | 国产日韩一区二区三免费 | 国产精品一区二区三区在线 |