找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2372|回复: 0
打印 上一主题 下一主题
收起左侧

自己构建OS基本工程-基于Cortex-M内核的源程序

[复制链接]
跳转到指定楼层
楼主
搭建任务控制块和任务调度器函数可完成自己的OS,最精简的框架,C文件只有217行代码,有完整详细注释。


单片机源程序如下:
  1. #include "os.h"  //使用内核
  2. #include "usart.h"

  3. /****************************用户任务函数声明*****************************/
  4. void Task1(void);
  5. void Task2(void);
  6. void Task3(void);
  7. /*******************************************************************/
  8. /*****************************用户任务堆栈创建**************************/
  9. //任务堆栈(一维数组)全局变量
  10. OS_STK Task1Stk[128];
  11. OS_STK Task2Stk[64];
  12. OS_STK Task3Stk[64];
  13. /*******************************************************************/
  14. /******************************用户任务加入内核运行*********************************/
  15. int main(void)
  16. {   
  17.           USART1_Config(9600); //串口1初使化
  18.           printf("-@OS Inside\r\n");
  19.     OSInit();
  20.     OSTaskCreate(Task1,&Task1Stk[128-1]); //创建任务1 //必须-1,数组标号最大为N-1
  21.     OSTaskCreate(Task2,&Task2Stk[64-1]); //创建任务2
  22.     OSTaskCreate(Task3,&Task3Stk[64-1]); //创建任务3
  23.     OSStartUp();
  24. }
  25. /***********************************************************************************/
  26. void Task1(void)  //任务1
  27. {   
  28.         while(1)
  29.          {       
  30.                  OSprintf("Task1 is running\r\n");                  
  31.                  OS_delayMs(1000);         
  32.          }
  33. }
  34. void Task2(void)  //任务2
  35. {
  36.         while(1)
  37.         {
  38.                 OSprintf("Task2 is running\r\n");
  39.                 OS_delayMs(2000);               
  40.         }
  41. }
  42.                
  43. void Task3(void) //任务3
  44. {
  45.         while(1)
  46.          {
  47.                  OSprintf("Task3 is running\r\n");                                               
  48.                  OS_delayMs(4000);                                                       
  49.          }                       
  50. }

  51. /*
  52. *望穿秋水提示:
  53. *想要更多任务的自己手动添加,添加任务时,任务堆栈、任务函数声明、任务创建参数名、任务函数名四者均要添加且名称要统一。
  54. *把void Taskx(void)看成普通的int main(void)使用即可,while(1){}必须存在;
  55. *任务名可以随意修改,Task1是默认的任务名,修改任务名时,任务堆栈、任务函数声明、任务创建参数名、任务函数名四者名称要统一。
  56. *这里默认创建了3个用户任务,用户可自行添加或删除(最大255个任务(含空闲任务))
  57. */
复制代码

所有资料51hei提供下载:
动手写OS基本工程-基于Cortex-M内核.zip (517.25 KB, 下载次数: 22)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表