本帖最后由 刘前辈 于 2011-11-14 19:23 编辑
看了所长写的OS大泻蜜调度器,正所谓内行看门道,外行看热闹;看得老刘是稀里哼哈,涕泪横飞; 再读123jj 的修改版,简直感动得不能自己,—— 太精彩了!胜读十年书啊。
俺建议123jj 不用玩127个流水灯任务忽悠自己,玩下面三个printf()打印输出任务足够了。
举例:main.c
#include <REG51.H> #include <stdio.h> #include "os.h"
#define Xms 500
void InitializeComPort( ) // 初始化串口 {
SCON= 0x50;
TMOD |= 0x20;
TH1= 0xF0;
TR1= 1;
TI= 1; }
void TestP0_0( ) // 任务1 {
while (1) {
Sleep(Xms);
printf("Task1 is using --------------------UART!\n");
Sleep(Xms);
} }
void TestP0_1( ) // 任务2 {
while (1) {
Sleep(Xms);
printf("Task2 is using ********************UART! \ n" );
Sleep(Xms);
} }
void TestP0_2() // 任务3 {
while (1) {
Sleep(Xms);
printf(" Task3 is using =====================UART!\n" );
Sleep(Xms);
}
}
/*
这叫啥子测试任务?忽悠老百姓呢。
void TestP0_3( )
{
while (1) {
Sleep(Xms);
Sleep(Xms);
Sleep(Xms);
P0_3 = ~P0_3;
Sleep(Xms);
P0_3 = ~P0_3;
Sleep(Xms);
Sleep(Xms);
Sleep(Xms);
Sleep(Xms);
}
}
void TestP0_4() {
while (1) {
Sleep(Xms);
Sleep(Xms);
Sleep(Xms);
Sleep(Xms);
P0_4 = ~P0_4;
Sleep(Xms);
P0_4 = ~P0_4;
Sleep(Xms);
Sleep(Xms);
Sleep(Xms);
}
}
*/
void main (void) {
InitializeComPort(); // 初始化串口
InitializeTasks(); // 初始化任务
CreateTask(10, TestP0_0); // 创建任务10
//只要创建3个任务就行了。
CreateTask(11, TestP0_1); // 创建任务11
CreateTask(12, TestP0_2); // 创建任务12 RunTasks(); // 运行任务
while (1) {; }
}
这三个任务,用所长写的调度器,结果:输出一片空白。
有幸123jj的修改版能够有输出,贴一下输出结果:
. . 也许为了输出正常,所长和123jj 的程序以后可能还要做大的修改,真诚盼望所长和123jj 2位元老以后多多写一些这样的“奥秘”、“接蜜”之类的程序供我们菜鸟学习,——当然最好是能实际使用的,或者能够接受别人指出不足,并且修改的。
123jj 对所长的奥秘调度器的评价“思路超级清晰,程序超级精简,”确实是“多一个字符显啰嗦,少一个字符则杯具。”—— 咱一个字符未动,果然概念超级混乱,输出超级杯具。
、、 |