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

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

淺談ucos 2的信號量

作者:佚名   來源:本站原創   點擊數:  更新時間:2012年01月19日   【字體:

  這2天在已有空就看信號量,本來沒頭緒的,查了資料也沒找到有用的東西,不過在例子中找到了感覺。于是重新把書那章看了看,然后親自調試代碼,終于摸到了頭緒。

       首先我很膜拜下大師。首先不說這個操作系統的有多復雜,大師寫的代碼這么規范,是我自嘆不如的,大師的代碼層次分明注釋詳細,可以看出大師是個十分嚴謹的人。就光這點讓人不得不佩服。然后是操作系統,雖然大師也是從ucos 2那里學到得,不過大師愿意把自己寫的用于51的操作系統分享給大家,這點更加的崇敬。

     現在回到正題,本來是想理解深透了再寫的,但是怕自己忙著進一步的研究,沒時間更新這邊的文章。首先信號量是個什么?信號量就象交通燈一樣,它告訴控制了汽車的流動。信號量控制了程序的同步運行。誰拿到了信號就可以享用CPU的時間片,沒有信號則任務被掛起。OSSemCreate 創建信號量,實際上是初始化信號量數組。OSSemPend()等待一個信號量

   這里首先在任務里初始化信號量,然后在使用等待信號量的函數,一旦有信號量,則立刻返回OS_SEM_OK,取得信號可以做下一步操作,如果取不到信號,則任務被掛起,在掛起之前,必須把局部變量存放到堆棧中,這也是書上說的為了保證重入性。    
            SP++;
        *((uint8 data *)SP) = Index; 
上面則把信號量的索引保存到堆棧中。然后清任務標志再切換到其他任務中,在這里有必要一提的事,在任務運行中,切到其他任務中只有幾種方式,1,中斷 2.通過系統睡眠函數 OSWait() 3.任務切換函數OSSched() 。 在OSSemPend()這個函數里開了臨界區,所以中斷不存在,睡眠函數也沒有,那么任務就一致運行直到OSSched() 函數的出現,吧CPU交給其他任務,同時正在運行的任務由于清掉了就緒的標志位,它的恢復有2種情況  1.超時時間到了,中斷吧時間片切給它繼續運行 2.OSSemPost()它調用OSSemintPost()會把等待信號量的表中吧最高優先級的任務的就緒表置1,然后切換并給與信號量,相當于等待到信號量并繼續未完成的工作。

      時間不早了,下回更新吧,我睡覺了。

      雖然頭又點疼,但還是吧文章更新完再說吧。好像上面已經把信號量說完了。當又信號就OSSemPend會返回得到信號的標志于是就進行對某個硬件的處理,如果沒得到則掛起任務,時間片留給其他任務,由于清掉了任務就緒表的標志所以掛起的任務只有等到超時或者某個中斷處理中發送了信號,喚醒等待該信號量的任務。  大體就是這樣子。至于調試嗎,在EN_OS_SEM  宏定義開啟,然后就可以使用信號量的函數了。你可以設置個全局變量,然后在2個任務中對他賦值,然后給他們控制信號量來達到測試目的。本人寫的代碼還有點問題,我掛起的任務喚醒,發現PC走錯地址了,知道哪有問題,但一時頭疼,無法繼續。消息隊列下回再更新。
 

關閉窗口

相關文章

主站蜘蛛池模板: 久久久精品天堂 | av在线天堂 | 日本亚洲精品成人欧美一区 | 亚洲福利一区二区 | 狠狠色综合久久婷婷 | 青青久久久 | 国产一区2区 | 精品久久久久久 | 欧美日韩18 | 国产午夜精品久久久 | av在线免费看网址 | 日日骑 | 色综合激情 | 先锋资源网站 | 久在线 | 粉嫩一区二区三区四区公司1 | 操人网站| 日韩欧美专区 | 一区二区在线免费观看 | 日韩免费视频 | 久久久久久成人 | 成人三级视频 | 亚洲综合精品 | 亚洲免费av一区 | 伊人免费观看视频 | 久久精品久久久 | 国产视频一区二区在线观看 | 秋霞电影院午夜伦 | 日韩在线一区二区三区 | 亚洲国产精品一区在线观看 | 国产精品免费播放 | 成人免费网站在线 | 天天拍天天操 | 一a级片| 成人精品国产 | 性在线| 精品www| 欧美成人自拍 | 97精品久久| 成人国产一区二区三区精品麻豆 | 欧美日韩电影一区二区 |