<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > STM32下使用Keil自帶的RTL

          STM32下使用Keil自帶的RTL

          作者: 時間:2016-11-24 來源:網(wǎng)絡(luò) 收藏
          初次使用RTL不是很懂,這是從別的論壇復(fù)制回來的感覺不錯能對初學(xué)者提供一些感覺。

          Keil ARTX(Advanced Real-Time eXecutive)是Keil為ARM 系列所提供的一個小型實時操作系統(tǒng),整合于其UV3開發(fā)環(huán)境之中.在下載并安裝了RealView MDK個人學(xué)習(xí)版后,ARTX同時安裝到了C:KeilARMRLRTX目錄下,在C:KeilARMBoardsKeilMCBSTM32STLIB_RTX_Blinky目錄下有STM32的例子程序。經(jīng)過簡單修改,運行在萬利開發(fā)板上。
          #include
          #include
          OS_TID t_phaseA; //分配任務(wù)ID號
          OS_TID t_phaseB;
          OS_TID t_phaseC;
          OS_TID t_phaseD;

          #define LED_A GPIO_Pin_4
          #define LED_B GPIO_Pin_5
          #define LED_C GPIO_Pin_6
          #define LED_D GPIO_Pin_7
          #define LED_On(led) GPIO_SetBits(GPIOC, led)
          #define LED_Off(led) GPIO_ResetBits(GPIOC, led)

          extern void SetupClock (void);
          extern void SetupLED (void);


          void phaseA (void) __task {
          for (;;) {
          LED_On (LED_A);
          os_dly_wait (100);
          LED_Off(LED_A);
          os_dly_wait (100);
          }
          }

          void phaseB (void) __task {
          for (;;) {
          LED_On (LED_B);
          os_dly_wait (100);
          LED_Off(LED_B);
          os_dly_wait (100);
          }
          }

          void phaseC (void) __task {
          for (;;) {
          LED_On (LED_C);
          os_dly_wait (100);
          LED_Off(LED_C);
          os_dly_wait (100);
          }
          }

          void phaseD (void) __task {
          for (;;) {
          LED_On (LED_D);
          os_dly_wait (100);
          LED_Off(LED_D);
          os_dly_wait (100);
          }
          }

          void init (void) __task {
          t_phaseA = os_tsk_create (phaseA, 0);
          os_dly_wait (50);
          t_phaseB = os_tsk_create (phaseB, 0);
          os_dly_wait (50);
          t_phaseC = os_tsk_create (phaseC, 0);
          os_dly_wait (50);
          t_phaseD = os_tsk_create (phaseD, 0);
          os_tsk_delete_self ();
          }

          int main (void) {
          SetupClock();
          SetupLED ();
          os_sys_init (init);
          }
          經(jīng)過初試化后,os_sys_init (init)啟動了初試化任務(wù)。在初試化任務(wù)中,又先后啟動了4個任務(wù),啟動后,

          本文引用地址:http://www.ex-cimer.com/article/201611/321061.htm

          刪除初試化任務(wù)。這4個任務(wù)各自控制一個LED的開關(guān)。

          ============================================

          個人理解:

          int main(void)

          {

          os_sys_init_user( TaskMain,

          50,

          TaskSysInitStack,

          SysInitTaskStakSize );

          while(1);

          }

          問1:為什么在TaskMain里面創(chuàng)建很多小任務(wù)不在下面繼續(xù)調(diào)用os_sys_init_user( ); 這個API呢?原因是因為初始化TaskMain之后不再返回了,所以他也執(zhí)行不到下面while 了。

          問2:TaskMain 里面創(chuàng)建的小任務(wù),而小任務(wù)里面也都是有while(1)死循環(huán),這就是多線程的概念。除了while(1)其他也都是只執(zhí)行一次,包括主函數(shù)和小任務(wù)里面的變量,只有while(1)是時間片和優(yōu)先級運行,實現(xiàn)多線程執(zhí)行。



          關(guān)鍵詞: STM32KeilRT

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();