找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

STM32 uCOS-III例程源碼下載(任務(wù)消息隊(duì)列,內(nèi)存管理,多值互斥信號量等)很全

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ucos iii例程


所有資料51hei提供下載:
3.ucosiii例程.zip (12.21 MB, 下載次數(shù): 87)



源碼列表:
0. STM32 裸機(jī)程序
1. 官方 uCOS-III 源碼
10.等待多個(gè)內(nèi)核對象
11.任務(wù)信號量
12.任務(wù)消息隊(duì)列
13.內(nèi)存管理
14.任務(wù)管理
15.中斷管理
16.各類統(tǒng)計(jì)信息
2. 移植 uCOS-III 到 STM32
3. 時(shí)鐘節(jié)拍
4. 時(shí)間管理
5. 軟件定時(shí)器
6.多值信號量
7.互斥信號量
8.消息隊(duì)列
9.事件標(biāo)志組


單片機(jī)源程序如下:
  1. /*
  2. *********************************************************************************************************
  3. *                                              EXAMPLE CODE
  4. *
  5. *                          (c) Copyright 2003-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 develop a similar product.
  9. *               Please help us continue to provide the Embedded community with the finest
  10. *               software available.  Your honesty is greatly appreciated.
  11. *********************************************************************************************************
  12. */

  13. /*
  14. *********************************************************************************************************
  15. *
  16. *                                            EXAMPLE CODE
  17. *
  18. *                                     ST Microelectronics STM32
  19. *                                              on the
  20. *
  21. *                                     Micrium uC-Eval-STM32F107
  22. *                                        Evaluation Board
  23. *
  24. * Filename      : app.c
  25. * Version       : V1.00
  26. * Programmer(s) : EHS
  27. *                 DC
  28. *********************************************************************************************************
  29. */

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

  35. #include <includes.h>


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

  41. OS_MUTEX mutex;                         //聲明互斥信號量


  42. uint8_t ucValue [ 2 ] = { 0x00, 0x00 };


  43. /*
  44. *********************************************************************************************************
  45. *                                                 TCB
  46. *********************************************************************************************************
  47. */

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

  49. static  OS_TCB   AppTaskWriteTCB;
  50. static  OS_TCB   AppTaskReadTCB;


  51. /*
  52. *********************************************************************************************************
  53. *                                                STACKS
  54. *********************************************************************************************************
  55. */

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

  57. static  CPU_STK  AppTaskWriteStk [ APP_TASK_WRITE_STK_SIZE ];
  58. static  CPU_STK  AppTaskReadStk [ APP_TASK_READ_STK_SIZE ];


  59. /*
  60. *********************************************************************************************************
  61. *                                         FUNCTION PROTOTYPES
  62. *********************************************************************************************************
  63. */

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

  65. static  void  AppTaskWrite  ( void * p_arg );
  66. static  void  AppTaskRead   ( void * p_arg );


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

  79. int  main (void)
  80. {
  81.     OS_ERR  err;


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

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

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

  98. }


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

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


  119.     (void)p_arg;

  120.     BSP_Init();                                                 //板級初始化
  121.     CPU_Init();                                                 //初始化 CPU 組件(時(shí)間戳、關(guān)中斷時(shí)間測量和主機(jī)名)

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

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

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

  131.    
  132.                 /* 創(chuàng)建互斥信號量 mutex */
  133.     OSMutexCreate ((OS_MUTEX  *)&mutex,           //指向信號量變量的指針
  134.                    (CPU_CHAR  *)"Mutex For Test", //信號量的名字
  135.                    (OS_ERR    *)&err);            //錯(cuò)誤類型
  136.                                                          

  137.                 /* 創(chuàng)建 AppTaskWrite 任務(wù) */
  138.     OSTaskCreate((OS_TCB     *)&AppTaskWriteTCB,                            //任務(wù)控制塊地址
  139.                  (CPU_CHAR   *)"App Task Write",                            //任務(wù)名稱
  140.                  (OS_TASK_PTR ) AppTaskWrite,                               //任務(wù)函數(shù)
  141.                  (void       *) 0,                                          //傳遞給任務(wù)函數(shù)(形參p_arg)的實(shí)參
  142.                  (OS_PRIO     ) APP_TASK_WRITE_PRIO,                        //任務(wù)的優(yōu)先級
  143.                  (CPU_STK    *)&AppTaskWriteStk[0],                         //任務(wù)堆棧的基地址
  144.                  (CPU_STK_SIZE) APP_TASK_WRITE_STK_SIZE / 10,               //任務(wù)堆?臻g剩下1/10時(shí)限制其增長
  145.                  (CPU_STK_SIZE) APP_TASK_WRITE_STK_SIZE,                    //任務(wù)堆棧空間(單位:sizeof(CPU_STK))
  146.                  (OS_MSG_QTY  ) 5u,                                         //任務(wù)可接收的最大消息數(shù)
  147.                  (OS_TICK     ) 0u,                                         //任務(wù)的時(shí)間片節(jié)拍數(shù)(0表默認(rèn)值OSCfg_TickRate_Hz/10)
  148.                  (void       *) 0,                                          //任務(wù)擴(kuò)展(0表不擴(kuò)展)
  149.                  (OS_OPT      )(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR), //任務(wù)選項(xiàng)
  150.                  (OS_ERR     *)&err);                                       //返回錯(cuò)誤類型

  151.                 /* 創(chuàng)建 AppTaskRead 任務(wù) */
  152.     OSTaskCreate((OS_TCB     *)&AppTaskReadTCB,                             //任務(wù)控制塊地址
  153.                  (CPU_CHAR   *)"App Task Read",                             //任務(wù)名稱
  154.                  (OS_TASK_PTR ) AppTaskRead,                                //任務(wù)函數(shù)
  155.                  (void       *) 0,                                          //傳遞給任務(wù)函數(shù)(形參p_arg)的實(shí)參
  156.                  (OS_PRIO     ) APP_TASK_READ_PRIO,                         //任務(wù)的優(yōu)先級
  157.                  (CPU_STK    *)&AppTaskReadStk[0],                          //任務(wù)堆棧的基地址
  158.                  (CPU_STK_SIZE) APP_TASK_READ_STK_SIZE / 10,                //任務(wù)堆?臻g剩下1/10時(shí)限制其增長
  159.                  (CPU_STK_SIZE) APP_TASK_READ_STK_SIZE,                     //任務(wù)堆?臻g(單位:sizeof(CPU_STK))
  160.                  (OS_MSG_QTY  ) 5u,                                         //任務(wù)可接收的最大消息數(shù)
  161.                  (OS_TICK     ) 0u,                                         //任務(wù)的時(shí)間片節(jié)拍數(shù)(0表默認(rèn)值OSCfg_TickRate_Hz/10)
  162.                  (void       *) 0,                                          //任務(wù)擴(kuò)展(0表不擴(kuò)展)
  163.                  (OS_OPT      )(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR), //任務(wù)選項(xiàng)
  164.                  (OS_ERR     *)&err);                                       //返回錯(cuò)誤類型
  165.    
  166.                 OSTaskDel ( & AppTaskStartTCB, & err );                     //刪除起始任務(wù)本身,該任務(wù)不再運(yùn)行
  167.                
  168.                
  169. }


  170. /*
  171. *********************************************************************************************************
  172. *                                          WRITE TASK
  173. *********************************************************************************************************
  174. */
  175. static  void  AppTaskWrite ( void * p_arg )
  176. {
  177.         OS_ERR      err;

  178.        
  179.         (void)p_arg;

  180.                                          
  181.         while (DEF_TRUE) {                                   //任務(wù)體
  182.                 OSMutexPend ((OS_MUTEX  *)&mutex,                  //申請互斥信號量 mutex
  183.                                                                  (OS_TICK    )0,                       //無期限等待
  184.                                                                  (OS_OPT     )OS_OPT_PEND_BLOCKING,    //如果不能申請到信號量就堵塞任務(wù)
  185.                                                                  (CPU_TS    *)0,                       //不想獲得時(shí)間戳
  186.                                                                  (OS_ERR    *)&err);                   //返回錯(cuò)誤類型               
  187.                
  188.                 ucValue [ 0 ] ++;
  189.                
  190.                 OSTimeDly ( 100, OS_OPT_TIME_DLY, & err );        //延時(shí)100個(gè)時(shí)鐘節(jié)拍(100ms)
  191.                
  192.                 ucValue [ 1 ] ++;
  193.                
  194.                 OSMutexPost ((OS_MUTEX  *)&mutex,                  //釋放互斥信號量 mutex
  195.                                                                  (OS_OPT     )OS_OPT_POST_NONE,        //進(jìn)行任務(wù)調(diào)度
  196.                                                                  (OS_ERR    *)&err);                   //返回錯(cuò)誤類型               
  197.                
  198.         }

  199. }


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

  212.                                          
  213.         while (DEF_TRUE) {                                   //任務(wù)體
  214.                 OSMutexPend ((OS_MUTEX  *)&mutex,                  //申請互斥信號量 mutex
  215.                                                                  (OS_TICK    )0,                       //無期限等待
  216.                                                                  (OS_OPT     )OS_OPT_PEND_BLOCKING,    //如果申請不到就堵塞任務(wù)
  217.                                                                  (CPU_TS    *)0,                       //不想獲得時(shí)間戳
  218.                                                                  (OS_ERR    *)&err);                   //返回錯(cuò)誤類型               
  219.                
  220.                 if ( ucValue [ 0 ] == ucValue [ 1 ] )
  221.                 {
  222.                         OS_CRITICAL_ENTER();                             //進(jìn)入臨界段
  223.                        
  224.                         printf ( "\r\nSUCCESSFUL\r\n" );
  225.                        
  226. ……………………

  227. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏5 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:376009 發(fā)表于 2018-8-16 16:41 | 只看該作者
謝謝了
回復(fù)

使用道具 舉報(bào)

板凳
ID:756185 發(fā)表于 2020-5-20 17:05 來自手機(jī) | 只看該作者
這是stm32f103的板子嗎
回復(fù)

使用道具 舉報(bào)

地板
ID:756185 發(fā)表于 2020-5-20 17:06 來自手機(jī) | 只看該作者
TSQ_STM32 發(fā)表于 2018-8-16 16:41
謝謝了

這是stmf103嗎
回復(fù)

使用道具 舉報(bào)

5#
ID:302293 發(fā)表于 2025-2-13 08:31 | 只看該作者

F429的,F(xiàn)1的么有
回復(fù)

使用道具 舉報(bào)

6#
ID:140644 發(fā)表于 2025-2-16 09:36 | 只看該作者
F1容量小
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表