任务切换的精华思想
来源:互联网 发布:开淘宝店需要上传照片 编辑:程序博客网 时间:2024/04/30 20:01
在21IC论坛上,无意中看到介绍简单OS的实现,感觉不错,抄下来.
#include <reg51.h> #define MAX_TASKS 2 //任务槽个数.必须和实际任务数一至 #define MAX_TASK_DEP 12 //最大栈深.最低不得少于2个,保守值为12. unsigned char idata task_stack[MAX_TASKS][MAX_TASK_DEP];//任务堆栈. unsigned char task_id; //当前活动任务号 //任务切换函数(任务调度器) void task_switch(){ task_sp[task_id] = SP; if(++task_id == MAX_TASKS) task_id = 0; SP = task_sp[task_id]; } //任务装入函数.将指定的函数(参数1)装入指定(参数2)的任务槽中.如果该槽中原来就有任务,则原任务丢失,但系统本身不会发生错误. void task_load(unsigned int fn, unsigned char tid){ task_sp[tid] = task_stack[tid] + 1; task_stack[tid][0] = (unsigned int)fn & 0xff; task_stack[tid][1] = (unsigned int)fn >> 8; } //从指定的任务开始运行任务调度.调用该宏后,将永不返回. #define os_start(tid) {task_id = tid,SP = task_sp[tid];return;} /*============================以下为测试代码============================*/ void task1(){ static unsigned char i; while(1){ i++; task_switch();//编译后在这里打上断点 } } void task2(){ static unsigned char j; while(1){ j+=2; task_switch();//编译后在这里打上断点 } } void main(){ //这里装载了两个任务,因此在定义MAX_TASKS时也必须定义为2 task_load(task1, 0);//将task1函数装入0号槽 task_load(task2, 1);//将task2函数装入1号槽 os_start(0); }
原文地址:http://bbs.21ic.com/icview-1843574-1-1.html
补充资料:http://blog.csdn.net/fivedoumi/article/details/50395701
http://www.eeworld.com.cn/mcu/article_2017010432937.html
阅读全文
0 0
- 任务切换的精华思想
- hadoop mapreduce 的精华的思想
- 任务,任务的切换,(TCB)
- ucos的任务切换
- UCOS_STM32的任务切换
- 任务切换的方法
- 编程思想+++++精华
- JAVA的精华就在面向对象思想
- JAVA的精华就在面向对象思想
- JAVA的精华就在面向对象思想
- 多任务操作系统的任务切换
- 任务切换的堆栈操作
- uclinux内核的任务切换
- CosOS任务切换的实现
- TSS----任务切换的核心
- 任务的调度和切换
- RTOS里的任务切换
- 任务切换
- Unity Shader:Waveform波形(2)-基本波形:正弦,三角,锯齿,直角以及其变种的实现方式
- idea 破解
- Android图片加载框架最全解析(一),Glide的基本用法
- Sql Server基本操作语句
- java中引用的用法
- 任务切换的精华思想
- Adreno GPU Profiler工具使用总结
- 右键打开命令行窗口CMD
- CCF 2016 工资计算C++,Java,工资计算解题思路
- 音视频封装格式、编码格式知识
- 一级指针
- Android内置音频文件
- js 数组去重
- phpstorm使用zen coding 快速编辑补全html/css代码