亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码

標(biāo)題: 51單片機(jī)微系統(tǒng)源碼 消息機(jī)制加隊(duì)列 [打印本頁(yè)]

作者: 1342853999    時(shí)間: 2017-2-28 12:23
標(biāo)題: 51單片機(jī)微系統(tǒng)源碼 消息機(jī)制加隊(duì)列
消息機(jī)制加隊(duì)列,源碼帶詳細(xì)注釋
作者介紹:
鳳舞天,原名:王紹偉,標(biāo)識(shí):wangsw
2001年: 畢業(yè)于蘭州大學(xué)電信專業(yè)。在大學(xué)期間擔(dān)任電子協(xié)會(huì)會(huì)長(zhǎng),為學(xué)校同學(xué)維修隨身聽(tīng)、收音機(jī)等電子設(shè)備,奠定焊接、維修和做事一看、二想、三做、四檢測(cè)的基礎(chǔ)。
2001年: 進(jìn)入中科院半導(dǎo)體所光電中心工作。
2003年: 基于MCU51開(kāi)發(fā)了實(shí)用單片機(jī)系統(tǒng)(MS)并開(kāi)源推廣,獲得廣大嵌入式初學(xué)者的好評(píng)。
2004年: 創(chuàng)業(yè)做逆變器,雖然失敗,但是從技術(shù)上、物料采購(gòu)上、生產(chǎn)上積累了寶貴的經(jīng)驗(yàn)。
2005年: 再次創(chuàng)業(yè),但是由于對(duì)市場(chǎng)不了解和對(duì)產(chǎn)品定位不明確,最終導(dǎo)致失敗。
2006年: 年在深圳市華禹高科技有限公司工作,引入了MTK方案,開(kāi)始手機(jī)開(kāi)發(fā)。
2008年: 發(fā)明了“電阻電容電感樣品本”,解決廣大電子愛(ài)好者基礎(chǔ)元器件的采購(gòu)、調(diào)試、存放問(wèn)題。
2009年: 創(chuàng)立了華禹工控科技有限公司,推出了P1300手機(jī)開(kāi)發(fā)模塊及相關(guān)手持POS產(chǎn)品。
2011年: 與東莞市俊知機(jī)械有限公司合作,研發(fā)大功率(6KW)超高頻(1MHz)感應(yīng)加熱焊接機(jī)。并于2012年,全面投入生產(chǎn),同時(shí)獲得工業(yè)自動(dòng)化經(jīng)驗(yàn)。
2013年: 開(kāi)始研發(fā)msPLC,針對(duì)工業(yè)自動(dòng)化行業(yè)開(kāi)源設(shè)計(jì)嵌入式PLC,并開(kāi)發(fā)了通用開(kāi)源平臺(tái)架構(gòu)嵌入式微系統(tǒng)(msOS)。
2014年: 應(yīng)邀參加清華大學(xué)第二屆開(kāi)源操作系統(tǒng)技術(shù)年會(huì)推廣msOS,編寫msOS書(shū)籍,推廣msOS。

完整代碼下載:
MS_MCU51_V1.00.rar (111.5 KB, 下載次數(shù): 74)


system.c源碼:
  1. /*
  2. ********************************************************************************
  3. *                              實(shí)用單片機(jī)系統(tǒng)
  4. *                                    MS
  5. *
  6. *                               主芯片:MCU51
  7. *                           深圳市雨滴科技有限公司
  8. *
  9. *                                作者:王紹偉
  10. *                                網(wǎng)名:鳳舞天
  11. *                                標(biāo)識(shí):Wangsw
  12. ********************************************************************************
  13. *文件名   : system.c
  14. *作用     : 系統(tǒng)應(yīng)用文件
  15. *創(chuàng)建時(shí)間 : 2013.8.17
  16. ********************************************************************************
  17. */

  18. #include "system.h"



  19. #define MessageBufferSum 4                              // 消息隊(duì)列深度

  20. struct MessageQueue                                     // 定義一個(gè)隊(duì)列結(jié)構(gòu)體
  21. {                                                      
  22.     ushort  * Start;                                    // 指針指向隊(duì)列開(kāi)始
  23.     ushort  * End;                                      // 指針指向隊(duì)列結(jié)束
  24.     ushort  * In;                                       // 指針插入一個(gè)消息
  25.     ushort  * Out;                                      // 指針取出一個(gè)消息
  26.     byte      Size;                                     // 隊(duì)列長(zhǎng)度
  27.     byte      Entries;                                  // 消息長(zhǎng)度
  28.     ushort    Buffer[MessageBufferSum];                 // 隊(duì)列存儲(chǔ)數(shù)組
  29. } ;

  30. static struct MessageQueue idata MessageQueue;



  31. static bool data EaSave;
  32. static byte data CriticalNesting = 0;
  33. byte code HextoAscii[16] =
  34. {
  35.         '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
  36. };

  37. void Delay(ushort delayClock)
  38. {
  39.         while(delayClock--);
  40. }

  41. void DelayUs(ushort delayTime)
  42. {
  43.     while(delayTime--);
  44. }

  45. void DelayMs(ushort delayTime)
  46. {
  47.         while(delayTime--)
  48.         {
  49.                 DelayUs(1000);
  50.         }
  51. }

  52. byte HexToAscii(byte hex)
  53. {
  54.         Assert(hex < 16);                   //斷言,一旦條件錯(cuò)誤,就執(zhí)行
  55.         return HextoAscii[hex];
  56. }


  57. /*******************************************************************************
  58. * 函數(shù)名        : EnterCritical
  59. * 描述            : 進(jìn)入臨界態(tài),防止中斷產(chǎn)生
  60. * 輸入?yún)?shù)  : 無(wú)
  61. * 返回參數(shù)  : 無(wú)
  62. ********************************************************************************
  63. *版本     作者            日期            說(shuō)明
  64. *V0.1    Wangsw        2013/10/11       初始版本
  65. *******************************************************************************/
  66. void EnterCritical(void)
  67. {
  68.     if (CriticalNesting == 0)   //第一級(jí)臨界態(tài)嵌套,保存全局中斷寄存器,關(guān)閉中斷
  69.         EA = false;
  70.    
  71.     CriticalNesting++;   
  72. }


  73. /*******************************************************************************
  74. * 函數(shù)名        : ExitCritical
  75. * 描述            : 退出臨界態(tài),恢復(fù)原來(lái)狀態(tài)
  76. * 輸入?yún)?shù)  : 無(wú)
  77. * 返回參數(shù)  : 無(wú)
  78. ********************************************************************************
  79. *版本     作者            日期            說(shuō)明
  80. *V0.1    Wangsw        2013/10/11       初始版本
  81. *******************************************************************************/
  82. void ExitCritical(void)
  83. {
  84.     if (CriticalNesting > 0)
  85.     {
  86.         CriticalNesting--;
  87.         if (CriticalNesting == 0)//第一級(jí)臨界態(tài)嵌套,恢復(fù)原狀態(tài)
  88.             EA = true;
  89.     }
  90. }

  91. void InitMessageQueue(void)
  92. {
  93.     MessageQueue.Start = MessageQueue.Buffer;
  94.     MessageQueue.End = MessageQueue.Buffer + MessageBufferSum - 1;
  95.     MessageQueue.In = MessageQueue.Start;
  96.     MessageQueue.Out = MessageQueue.Start;
  97.     MessageQueue.Size = MessageBufferSum;
  98.     MessageQueue.Entries = 0;
  99. }

  100. /*******************************************************************************
  101. * 函數(shù)名        : PostMessage
  102. * 描述            : 發(fā)送消息
  103. * 輸入?yún)?shù)  : message: 消息類型,
  104. *             value:消息值,MessageTimer類型為16bit地址,其他類型下都是8bit數(shù)據(jù)         
  105. * 返回參數(shù)  : 無(wú)
  106. *******************************************************************************/
  107. void PostMessage(MessageEnum message, ushort value)
  108. {
  109.     EnterCritical();                                                                 // 進(jìn)入臨界態(tài)
  110.     Assert(MessageQueue.Entries <= MessageQueue.Size);        // 斷言,判斷是否滿。

  111.     if(message == MessageTimer)                                                // 軟件定時(shí)器類型
  112.         *MessageQueue.In = value;                                              // 直接賦16bit地址
  113.     else                                                                       // 常規(guī)消息
  114.     {
  115.         UshortToByte1(*MessageQueue.In) = message;        // 把類型賦給高地址
  116.         UshortToByte0(*MessageQueue.In) = value & 0xFF;        // 把值賦給低地址
  117.     }
  118.    
  119.         MessageQueue.In++;                                       // 消息入口加一        
  120.    
  121.     if(MessageQueue.In > MessageQueue.End)                        // 入口越界循環(huán)
  122.         MessageQueue.In = MessageQueue.Start;
  123.    
  124.     MessageQueue.Entries++;                                        // 消息數(shù)量加一
  125.    
  126.         ExitCritical();                                          // 退出臨界態(tài)
  127. }

  128. /*******************************************************************************
  129. * 函數(shù)名        : PendMessageQueue
  130. * 描述            : 等待消息
  131. * 輸入?yún)?shù)  : 無(wú)      
  132. * 返回參數(shù)  : 無(wú)
  133. *******************************************************************************/
  134. ushort PendMessageQueue(void)
  135. {   
  136.     ushort message;
  137.     while(MessageQueue.Entries == 0)                        // 等待消息
  138.     { /* 推薦在這兒喂狗 */ };                                                                                
  139.    
  140.     message = *MessageQueue.Out++;                                    // 消息出口加一
  141.     MessageQueue.Entries--;                                                    // 消息數(shù)量減一
  142.    
  143.     if (MessageQueue.Out > MessageQueue.End)             // 出口越界循環(huán)
  144.         MessageQueue.Out = MessageQueue.Start;
  145.    
  146.     return(message);                                                            // 返回消息
  147. }
復(fù)制代碼





作者: 376262974    時(shí)間: 2017-6-28 10:16
希望是個(gè)好東西,研究研究
作者: fcxqczzyjdxx    時(shí)間: 2017-9-11 10:28
STC單片機(jī)定時(shí)器中斷自動(dòng)清零,不適合
不知道有沒(méi)有改進(jìn)的方法
作者: lukhxw    時(shí)間: 2017-9-12 19:15
正在思考這個(gè)問(wèn)題,幫大忙了
謝謝~
作者: bjhou2009    時(shí)間: 2017-10-4 20:51
積分不夠啊,給個(gè)鏈接下下
作者: LIAOYAN123    時(shí)間: 2018-5-14 19:17
希望是個(gè)好東西,研究研究,現(xiàn)在正要需要
作者: zhaobiao    時(shí)間: 2018-7-12 15:40
KeilC51中使用函數(shù)指針有沒(méi)有影響,記得函數(shù)指針做參數(shù)在c51里面需要特殊處理。
作者: wdliming    時(shí)間: 2018-8-8 18:01
謝謝分享,重新學(xué)習(xí)~~
作者: 西點(diǎn)鐘靈毓秀    時(shí)間: 2018-9-26 08:50
應(yīng)該是好東西,看看
作者: Ma372415166    時(shí)間: 2020-8-12 14:07
thinkyou very much!




歡迎光臨 (http://www.denmoz.com/bbs/) Powered by Discuz! X3.1