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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

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

STM32F107+UCOSIII移植源碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:337278 發(fā)表于 2018-5-24 14:18 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
附件是官方STM32F107 + ucos III 源碼,包含 LED測(cè)試任務(wù),需要的帶走

本實(shí)驗(yàn)將實(shí)現(xiàn)如下功能:本實(shí)驗(yàn)移植的是3.03版本的UCOSIII,支持FPU。本實(shí)驗(yàn)通過建立3個(gè)簡(jiǎn)單的任務(wù)來測(cè)試UCOSIII的移植和FPU的移植是否移植成功。本實(shí)驗(yàn)要打開串口調(diào)試助手,我們觀察到開發(fā)板上的LED0和LED1在閃爍,串口調(diào)試助手每500ms接收到一次開發(fā)板發(fā)送的數(shù)據(jù),數(shù)據(jù)以0.01遞增。

單片機(jī)源程序如下:
  1. #include "led.h"
  2. #include "delay.h"
  3. #include "sys.h"
  4. #include "usart.h"
  5. #include "includes.h"


  6. //UCOSIII中以下優(yōu)先級(jí)用戶程序不能使用,ALIENTEK
  7. //將這些優(yōu)先級(jí)分配給了UCOSIII的5個(gè)系統(tǒng)內(nèi)部任務(wù)
  8. //優(yōu)先級(jí)0:中斷服務(wù)服務(wù)管理任務(wù) OS_IntQTask()
  9. //優(yōu)先級(jí)1:時(shí)鐘節(jié)拍任務(wù) OS_TickTask()
  10. //優(yōu)先級(jí)2:定時(shí)任務(wù) OS_TmrTask()
  11. //優(yōu)先級(jí)OS_CFG_PRIO_MAX-2:統(tǒng)計(jì)任務(wù) OS_StatTask()
  12. //優(yōu)先級(jí)OS_CFG_PRIO_MAX-1:空閑任務(wù) OS_IdleTask()
  13. //廣州市星翼電子科技有限公司  
  14. //作者:正點(diǎn)原子 @ALIENTEK

  15. //任務(wù)優(yōu)先級(jí)
  16. #define START_TASK_PRIO                3
  17. //任務(wù)堆棧大小       
  18. #define START_STK_SIZE                 512
  19. //任務(wù)控制塊
  20. OS_TCB StartTaskTCB;
  21. //任務(wù)堆棧       
  22. CPU_STK START_TASK_STK[START_STK_SIZE];
  23. //任務(wù)函數(shù)
  24. void start_task(void *p_arg);

  25. //任務(wù)優(yōu)先級(jí)
  26. #define LED0_TASK_PRIO                4
  27. //任務(wù)堆棧大小       
  28. #define LED0_STK_SIZE                 128
  29. //任務(wù)控制塊
  30. OS_TCB Led0TaskTCB;
  31. //任務(wù)堆棧       
  32. CPU_STK LED0_TASK_STK[LED0_STK_SIZE];
  33. void led0_task(void *p_arg);

  34. //任務(wù)優(yōu)先級(jí)
  35. #define LED1_TASK_PRIO                5
  36. //任務(wù)堆棧大小       
  37. #define LED1_STK_SIZE                 128
  38. //任務(wù)控制塊
  39. OS_TCB Led1TaskTCB;
  40. //任務(wù)堆棧       
  41. CPU_STK LED1_TASK_STK[LED1_STK_SIZE];
  42. //任務(wù)函數(shù)
  43. void led1_task(void *p_arg);

  44. //任務(wù)優(yōu)先級(jí)
  45. #define FLOAT_TASK_PRIO                6
  46. //任務(wù)堆棧大小
  47. #define FLOAT_STK_SIZE                128
  48. //任務(wù)控制塊
  49. OS_TCB        FloatTaskTCB;
  50. //任務(wù)堆棧
  51. __align(8) CPU_STK        FLOAT_TASK_STK[FLOAT_STK_SIZE];
  52. //任務(wù)函數(shù)
  53. void float_task(void *p_arg);

  54. int main(void)
  55. {
  56.         OS_ERR err;
  57.         CPU_SR_ALLOC();
  58.        
  59.         delay_init();       //延時(shí)初始化
  60.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //中斷分組配置
  61.         uart_init(115200);    //串口波特率設(shè)置
  62.         LED_Init();         //LED初始化
  63.        
  64.         OSInit(&err);                //初始化UCOSIII
  65.         OS_CRITICAL_ENTER();//進(jìn)入臨界區(qū)
  66.         //創(chuàng)建開始任務(wù)
  67.         OSTaskCreate((OS_TCB         * )&StartTaskTCB,                //任務(wù)控制塊
  68.                                  (CPU_CHAR        * )"start task",                 //任務(wù)名字
  69.                  (OS_TASK_PTR )start_task,                         //任務(wù)函數(shù)
  70.                  (void                * )0,                                        //傳遞給任務(wù)函數(shù)的參數(shù)
  71.                  (OS_PRIO          )START_TASK_PRIO,     //任務(wù)優(yōu)先級(jí)
  72.                  (CPU_STK   * )&START_TASK_STK[0],        //任務(wù)堆棧基地址
  73.                  (CPU_STK_SIZE)START_STK_SIZE/10,        //任務(wù)堆棧深度限位
  74.                  (CPU_STK_SIZE)START_STK_SIZE,                //任務(wù)堆棧大小
  75.                  (OS_MSG_QTY  )0,                                        //任務(wù)內(nèi)部消息隊(duì)列能夠接收的最大消息數(shù)目,為0時(shí)禁止接收消息
  76.                  (OS_TICK          )0,                                        //當(dāng)使能時(shí)間片輪轉(zhuǎn)時(shí)的時(shí)間片長(zhǎng)度,為0時(shí)為默認(rèn)長(zhǎng)度,
  77.                  (void           * )0,                                        //用戶補(bǔ)充的存儲(chǔ)區(qū)
  78.                  (OS_OPT      )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR, //任務(wù)選項(xiàng)
  79.                  (OS_ERR         * )&err);                                //存放該函數(shù)錯(cuò)誤時(shí)的返回值
  80.         OS_CRITICAL_EXIT();        //退出臨界區(qū)         
  81.         OSStart(&err);  //開啟UCOSIII
  82.         while(1);
  83. }

  84. //開始任務(wù)函數(shù)
  85. void start_task(void *p_arg)
  86. {
  87.         OS_ERR err;
  88.         CPU_SR_ALLOC();
  89.         p_arg = p_arg;

  90.         CPU_Init();
  91. #if OS_CFG_STAT_TASK_EN > 0u
  92.    OSStatTaskCPUUsageInit(&err);          //統(tǒng)計(jì)任務(wù)               
  93. #endif
  94.        
  95. #ifdef CPU_CFG_INT_DIS_MEAS_EN                //如果使能了測(cè)量中斷關(guān)閉時(shí)間
  96.     CPU_IntDisMeasMaxCurReset();       
  97. #endif
  98.        
  99. #if        OS_CFG_SCHED_ROUND_ROBIN_EN  //當(dāng)使用時(shí)間片輪轉(zhuǎn)的時(shí)候
  100.          //使能時(shí)間片輪轉(zhuǎn)調(diào)度功能,時(shí)間片長(zhǎng)度為1個(gè)系統(tǒng)時(shí)鐘節(jié)拍,既1*5=5ms
  101.         OSSchedRoundRobinCfg(DEF_ENABLED,1,&err);  
  102. #endif               
  103.        
  104.         OS_CRITICAL_ENTER();        //進(jìn)入臨界區(qū)
  105.         //創(chuàng)建LED0任務(wù)
  106.         OSTaskCreate((OS_TCB         * )&Led0TaskTCB,               
  107.                                  (CPU_CHAR        * )"led0 task",                
  108.                  (OS_TASK_PTR )led0_task,                        
  109.                  (void                * )0,                                       
  110.                  (OS_PRIO          )LED0_TASK_PRIO,     
  111.                  (CPU_STK   * )&LED0_TASK_STK[0],       
  112.                  (CPU_STK_SIZE)LED0_STK_SIZE/10,       
  113.                  (CPU_STK_SIZE)LED0_STK_SIZE,               
  114.                  (OS_MSG_QTY  )0,                                       
  115.                  (OS_TICK          )0,                                       
  116.                  (void           * )0,                                       
  117.                  (OS_OPT      )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,
  118.                  (OS_ERR         * )&err);                               
  119.                                  
  120.         //創(chuàng)建LED1任務(wù)
  121.         OSTaskCreate((OS_TCB         * )&Led1TaskTCB,               
  122.                                  (CPU_CHAR        * )"led1 task",                
  123.                  (OS_TASK_PTR )led1_task,                        
  124.                  (void                * )0,                                       
  125.                  (OS_PRIO          )LED1_TASK_PRIO,            
  126.                  (CPU_STK   * )&LED1_TASK_STK[0],       
  127.                  (CPU_STK_SIZE)LED1_STK_SIZE/10,       
  128.                  (CPU_STK_SIZE)LED1_STK_SIZE,               
  129.                  (OS_MSG_QTY  )0,                                       
  130.                  (OS_TICK          )0,                                       
  131.                  (void           * )0,                               
  132.                  (OS_OPT      )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,
  133.                  (OS_ERR         * )&err);       
  134.                          
  135.         //創(chuàng)建浮點(diǎn)測(cè)試任務(wù)
  136.         OSTaskCreate((OS_TCB         * )&FloatTaskTCB,               
  137.                                  (CPU_CHAR        * )"float test task",                
  138.                  (OS_TASK_PTR )float_task,                        
  139.                  (void                * )0,                                       
  140.                  (OS_PRIO          )FLOAT_TASK_PRIO,            
  141.                  (CPU_STK   * )&FLOAT_TASK_STK[0],       
  142.                  (CPU_STK_SIZE)FLOAT_STK_SIZE/10,       
  143.                  (CPU_STK_SIZE)FLOAT_STK_SIZE,               
  144.                  (OS_MSG_QTY  )0,                                       
  145.                  (OS_TICK          )0,                                       
  146.                  (void           * )0,                               
  147.                  (OS_OPT      )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,
  148.                  (OS_ERR         * )&err);                                                                 
  149.         OS_TaskSuspend((OS_TCB*)&StartTaskTCB,&err);                //掛起開始任務(wù)                         
  150.         OS_CRITICAL_EXIT();        //進(jìn)入臨界區(qū)
  151. }

  152. //led0任務(wù)函數(shù)
  153. void led0_task(void *p_arg)
  154. {
  155.         OS_ERR err;
  156.         p_arg = p_arg;
  157.         while(1)
  158.         {
  159.                 LED0=0;
  160.                 OSTimeDlyHMSM(0,0,0,200,OS_OPT_TIME_HMSM_STRICT,&err); //延時(shí)200ms
  161.                 LED0=1;
  162.                 OSTimeDlyHMSM(0,0,0,500,OS_OPT_TIME_HMSM_STRICT,&err); //延時(shí)500ms
  163.         }
  164. }

  165. //led1任務(wù)函數(shù)
  166. void led1_task(void *p_arg)
  167. {
  168.         OS_ERR err;
  169.         p_arg = p_arg;
  170.         while(1)
  171.         {
  172.                 LED1=~LED1;
  173.                 OSTimeDlyHMSM(0,0,0,500,OS_OPT_TIME_HMSM_STRICT,&err); //延時(shí)500ms
  174.         }
  175. }

  176. //浮點(diǎn)測(cè)試任務(wù)
  177. void float_task(void *p_arg)
  178. {
  179.         CPU_SR_ALLOC();
  180.         static float float_num=0.01;
  181.         while(1)
  182.         {
  183.                 float_num+=0.01f;
  184.                 OS_CRITICAL_ENTER();        //進(jìn)入臨界區(qū)
  185.                 printf("float_num的值為: %.4f\r\n",float_num);
  186.                 OS_CRITICAL_EXIT();                //退出臨界區(qū)
  187.                 delay_ms(500);                        //延時(shí)500ms
  188.         }
  189. }
復(fù)制代碼

所有資料51hei提供下載:
例4-1 UCOSIII移植.rar (637.86 KB, 下載次數(shù): 63)


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

使用道具 舉報(bào)

沙發(fā)
ID:415857 發(fā)表于 2019-9-6 17:42 | 只看該作者
謝謝分享
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 精品自拍视频在线观看 | 免费日韩av网站 | 羞羞色网站 | 91综合在线观看 | 国产日韩精品在线 | 中文字幕一区二区三区精彩视频 | 久久精品99国产精品 | 精品一区二区久久久久久久网站 | 成人国产精品久久 | 黄色国产大片 | 国产伦精品一区二区三毛 | 午夜影院在线观看视频 | 黄色在线免费看 | 日韩免费中文字幕 | 免费在线看黄视频 | 久久亚洲一区二区三区四区 | 成人 在线 | 水蜜桃久久夜色精品一区 | 国产精品1区2区 | 国产激情片在线观看 | 男女羞羞在线观看 | 国产一区二区在线免费观看 | 亚洲一区中文字幕在线观看 | 麻豆va | 免费在线看黄 | 99热精品在线观看 | 免费一区 | 在线播放第一页 | 美日韩免费视频 | 欧美成人第一页 | 日本一道本视频 | 精品欧美久久 | 国产成人精品一区二区三区在线观看 | 成人免费在线视频 | 一级做受毛片免费大片 | 国产精品美女久久久久久免费 | 国产精品福利视频 | 日韩一区二区三区精品 | 精品久久电影 | 在线免费观看黄a | 欧美一区二区在线观看 |