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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3178|回復: 3
打印 上一主題 下一主題
收起左側

單片機小小調度器源程序 操作系統相關

[復制鏈接]
跳轉到指定樓層
樓主
一個簡易的調度器


單片機源程序如下:
  1. #include <stc89c51.h>
  2. /****小小調度器開始**********************************************/
  3. #define MAXTASKS 3
  4. volatile unsigned char timers[MAXTASKS];
  5. #define _SS static unsigned char _lc=0; switch(_lc){default:
  6. #define _EE ;}; _lc=0; return 255;
  7. #define WaitX(tickets)??do {_lc=(__LINE__+((__LINE__%256)==0))%256; return tickets ;} while(0); case (__LINE__+((__LINE__%256)==0))%256:

  8. #define RunTask(TaskName,TaskID) do { if (timers[TaskID]==0) timers[TaskID]=TaskName(); }??while(0);
  9. #define RunTaskA(TaskName,TaskID) { if (timers[TaskID]==0) {timers[TaskID]=TaskName(); continue;} }? ?//前面的任務優先保證執行

  10. #define CallSub(SubTaskName) do {unsigned char currdt; _lc=(__LINE__+((__LINE__%256)==0))%256; return 0; case (__LINE__+((__LINE__%256)==0))%256:??currdt=SubTaskName(); if(currdt!=255) return currdt;} while(0);
  11. #define InitTasks() {unsigned char i; for(i=MAXTASKS;i>0 ;i--) timers[i]=0; }
  12. #define UpdateTimers() {unsigned char i; for(i=MAXTASKS;i>0 ;i--){if((timers[i-1]!=0)&&(timers[i-1]!=255)) timers[i-1]--;}}

  13. #define SEM unsigned int
  14. //初始化信號量
  15. #define InitSem(sem) sem=0;
  16. //等待信號量
  17. #define WaitSem(sem) do{ sem=1; WaitX(0); if (sem>0) return 1;} while(0);
  18. //等待信號量或定時器溢出, 定時器tickets 最大為0xFFFE
  19. #define WaitSemX(sem,tickets)??do { sem=tickets+1; WaitX(0); if(sem>1){ sem--;??return 1;} } while(0);
  20. //發送信號量
  21. #define SendSem(sem)??do {sem=0;} while(0);

  22. /*****小小調度器結束*******************************************************/


  23. sbit LED1 = P2^1;
  24. sbit LED2 = P2^2;

  25. sbit LED0 = P2^5;

  26. unsigned char task0(){
  27.         _SS
  28.         while(1){
  29.                 WaitX(50);
  30.                 LED0=!LED0;
  31.         }
  32.         _EE
  33. }

  34. unsigned char??task1(){
  35.         _SS
  36.         while(1){
  37.                 WaitX(100);
  38.                 LED1=!LED1;
  39.         }
  40.         _EE
  41. }

  42. unsigned char??task2(){
  43.         _SS
  44.         while(1){
  45.                 WaitX(100);
  46.                 LED2=!LED2;
  47.         }
  48.         _EE
  49. }

  50. void InitT0()
  51. {
  52.         TMOD = 0x21;
  53.         IE |= 0x82;??// 12t
  54.         TL0=0Xff;
  55.         TH0=0XDB;
  56.         TR0 = 1;
  57. }

  58. void INTT0(void) interrupt 1 using 1
  59. {
  60.         TL0=0Xff;? ? //10ms 重裝
  61.         TH0=0XDB;//b7;

  62.         UpdateTimers();

  63.         RunTask(task0,0);//任務0具有精確按時獲得執行的權限,要求:task0每次執行消耗時間<0.5個 ticket
  64. }




  65. void main()
  66. {
  67.         InitT0();
  68.         InitTasks(); //初始化任務,實際上是給timers清零
  69.         while(1){
  70.                 //? ?? ?? ???RunTask(task0,0);
  71.                 RunTaskA(task1,1);//任務1具有比任務2高的運行權限
  72.                 RunTaskA(task2,2);//任務2具有低的運行權限
  73.         }
  74. }
復制代碼

所有資料51hei提供下載:
小小調度器.zip (11.96 KB, 下載次數: 40)


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:328014 發表于 2019-5-17 06:25 | 只看該作者
好資料,51黑有你更精彩!!!
回復

使用道具 舉報

板凳
ID:105845 發表于 2022-12-7 14:21 | 只看該作者
編譯后出現test.c(99): warning C294: unreachable code。這個怎么消除呢?
回復

使用道具 舉報

地板
ID:335252 發表于 2022-12-7 19:38 | 只看該作者
樓主棒棒的
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美888| 在线观看黄色大片 | 中文精品久久 | 国产精品亚洲欧美日韩一区在线 | 日韩成人免费视频 | 国产精品欧美日韩 | 欧美国产视频 | 亚洲精品国产精品国自产在线 | 黄色成人av | 成人在线观看免费 | 色资源在线 | 欧美一区二区三区,视频 | 国产美女福利在线观看 | 免费在线观看一区二区 | 久久久精品视频免费 | 亚洲一区二区精品视频 | 精品国产乱码久久久 | 精品一级 | 黄视频免费观看 | 国产精品一区二区三区在线 | 国产精品视频在线观看 | 小视频你懂得 | 亚洲精品久久区二区三区蜜桃臀 | 久久精品高清视频 | 日韩一区不卡 | 欧美一区二区三区在线观看视频 | 秋霞电影一区二区 | 91麻豆精品国产91久久久久久 | 久久新| 久久99国产精一区二区三区 | 亚洲免费网址 | 国产中文区二幕区2012 | 99re| 国产美女高潮 | 97精品国产一区二区三区 | 日韩精品视频一区二区三区 | 999免费观看视频 | 欧美不卡视频一区发布 | 男人的天堂中文字幕 | 日韩在线观看中文字幕 | 99视频入口 |