打印

所长大泻蜜调度器读后感

[复制链接]
10611|74
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
刘前辈|  楼主 | 2011-11-14 18:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 刘前辈 于 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 对所长的奥秘调度器的评价“思路超级清晰,程序超级精简,”确实是“多一个字符显啰嗦,少一个字符则杯具。”
—— 咱一个字符未动,果然概念超级混乱,输出超级杯具。


、、

相关帖子

沙发
刘前辈|  楼主 | 2011-11-14 18:26 | 只看该作者

西安农民工的最简单调度器输出

本帖最后由 刘前辈 于 2011-11-14 19:43 编辑
#112楼 highgear
         看了103楼刘工改过的代码,就知道刘工为何不展示代码。就那么一点点改过的代码,把水平暴露无遗。

.
.
呵呵……看来2位元老工程师气不顺?职业高手“水平”高还是把程序修改好,用程序输出说话为好。

     别人“西安农民工”最简单的调度器都能做到正确输出,老所长如此职业高手写的如此漂亮的调度器却做不到?——看看别人的输出,不服气不行,骂有什么用?别气坏了身子呦……年纪大了,就别跟年轻人争喽……还是健康第一





..

使用特权

评论回复
板凳
刘前辈|  楼主 | 2011-11-14 19:38 | 只看该作者
要不要俺老刘替所长修改程序错误?需要的话说一声,俺已经修改好啦?

     123jj 恐怕眼力有限,看不出来超级BUG。——当然让小辈看出BUG不是什么有光的事。你看所长就有点气急败坏。

//

使用特权

评论回复
地板
流行音乐| | 2011-11-14 20:27 | 只看该作者
我看了“西安农民工”的程序,他在中断断中调用无限循环函数,这根本是不可能有效运行的:
void TaskSwitch()  //定时器中断调用此函数
{
    TaskID = TaskID + 1;         
    if(2 == TaskID) TaskID = 0;
    (*pTask[TaskID])();  //此函数再调用死循环的任务函数,导致永远不会退出定时器中断。
}
void Task1()
{
    while(1)
        {
           P2 = 0X0F;
        }
}

不知刘前辈如何运行出来的,希望能把代码传上来,让大家验证一下。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
Cortex-M0 + 1
5
highgear| | 2011-11-14 21:09 | 只看该作者
刘工工,我说你的智商低,没有说错吧?

刘工工你连造谣生事都那么低级无趣,而这样一个简单问题刘工工都搞不懂,怎能不让人说你弱智呢。
你去看看dos下的程序, 弄明白为什么 printf 可以工作,再来提问。

使用特权

评论回复
6
highgear| | 2011-11-14 21:33 | 只看该作者
另外,大泄密中的 os 是 highgear 写的,不是所长,刘工工把东厂那一套翻来覆去,没有意义。

使用特权

评论回复
7
highgear| | 2011-11-14 22:36 | 只看该作者
本帖最后由 highgear 于 2011-11-15 00:45 编辑

算了,我还是来讲解一下刘工的提到的问题,当作给感兴趣的朋友的技术解答

1) printf
printf 在keil c 中调用了putchar, 使用串口输出,而串口输出是一个慢速设备,所以在多任务下使用 printf 时,要注意避免资源冲突,最简单的方法是用 DisalbeInterrupt/EnableInterrupt 来保证任务的独占性。注意看 DOS 程序中的printf 用法。
其次,printf 额外使用了R1, R2, R3等, 因此需要把这些寄存器保存,这得使用汇编,在我的帖子里已经123jj已经清楚地讲明。

2)关于 "西安农民工" 的程序。
西安农民工的程序显然是随手写的,没有经过仔细认真地考虑。而刘工所改,没有保存任务环境,这明显看出刘工对 os 的具体运作不了解,即便是看过我那个相当简化的os后.

3)什么是良好的程序
这个问题被讨论了很多,我就刘工所改的那一点程序来说明。
a) 格式混乱,这是程序员的大忌;
b) 不要使用全局变量来返回参数
t0_BH();   
if(LED)
{
LED=0;
这种方式在初学者的程序中很常见,应为:
if (t0_BH()) {  
...

c) 应该使用一个有意义的函数名,而不是莫名其妙的 t0_BH。
d) T0_ISR.temp=pTask[TaskID] 未定义,而且拖沓冗长。
最简:
    *((unsigned char data*) (SP - 5)) = pTask[TaskID];
    *((unsigned char data*) (SP - 4)) = ((unsigned int) pTask[TaskID]) >> 8;

注重效率:
unsigned int task_ptr;
unsigned char data* p;
.....
task_ptr = (unsigned int) pTask[TaskID];
p = SP - 5;
*p++ = (unsigned char) task_ptr;
*p = (unsigned char) (task_ptr >> 8);

使用特权

评论回复
评分
参与人数 2威望 +2 收起 理由
sun520up + 1
Cortex-M0 + 1
8
mcu5i51| | 2011-11-15 07:51 | 只看该作者
我来打酱油,顺便吸收点营养,LX同胞继续讨论

使用特权

评论回复
9
Ryanhsiung| | 2011-11-15 07:57 | 只看该作者
打酱油,路过

使用特权

评论回复
10
刘前辈|  楼主 | 2011-11-15 09:14 | 只看该作者
哈哈……,所长用自己的调度器解决不了Printf 就恼怒,一着急就讲课,就是玩不了真的。

少说废话,西安农民工能玩的pintf(),你玩不了。谁不知道prinf( )使用串口输出?别扯无关的问题,老年人啰嗦半天,就是不上正题,哈哈……少废话,——别人行,为什么你不行?别人随手写的简单调度器就能不采用关中断的方式避免资源竞争。就能通过临界区,你就不行。
      别人怎么写语句那是别人的事,别人不但实现了目标,而且代码长度仅仅是你的1/5!我凭什么照你的规范写?——又臭又长,还达不到目标。
       你写的再规范,再漂亮,也是窗口里的模特——只能看,不能用。

所长教人那么多书写规范,秀一个所长自己写的句子:
     xp = (char *)&mainRegTask[0];    //所长写的源程序
是不是又臭又长?123jj 也没给简化?不会还是不懂?

再讲一个所长闹得大笑话,让咱老刘笑喷:所长的程序,在每个系统节拍(50ms)都调度甚至切换一次!这真是天大的笑话,OS文盲啊!还在这摇头晃脑讲DOS ?DOS 系统节拍55ms ,切换么?好好看看切换条件,看懂了再来吧!
   
         搞了一辈子软件的职业高手,闹这么大笑话,还有资格在这讲课?……下去!

。。

使用特权

评论回复
11
刘前辈|  楼主 | 2011-11-15 09:16 | 只看该作者
老刘写的t0-BH( ),所长连BH 什么意思都不懂,就在这瞎评论?

我建议所长看看Linux教材,中断程序忌讳什么,什么叫中断程序的下半部BH。
   
、、

使用特权

评论回复
12
highgear| | 2011-11-15 09:33 | 只看该作者
刘公公啊,技术问题我就不给你解答了,也懒得驳你刘公公。刘公公你的帖子证明了你的愚蠢弱智,连造个谣都是那么低劣,可你刘公公却洋洋自得,自以为得计,真是可怜又可笑。

   
我早说过刘钱贝不懂技术, 你们这些聪明人怎么想去试图说服一个连一幅画都要请人挂,还美其名曰站在巨人肩膀上的白痴呢?
         

使用特权

评论回复
13
lxyppc| | 2011-11-15 09:45 | 只看该作者
.
.
呵呵……看来2位元老工程师气不顺?职业高手“水平”高还是把程序修改好,用程序输出说话为好。

     别人“西安农民工”最简单的调度器都能做到正确输出,老所长如此职业高手写的如此漂亮的调度器却做不到? ...
刘前辈 发表于 2011-11-14 18:26

想瞻仰一下刘前辈是如何化腐朽为神奇的
能不能公布一下你打印出这种效果的代码

使用特权

评论回复
14
sjl2006| | 2011-11-15 10:19 | 只看该作者
本帖最后由 sjl2006 于 2011-11-15 10:21 编辑

公说公有理婆说婆有理,代码贴全了让网友评判评判,莫拿不相干的别人的代码或别人的理论作为你自己的武器。

使用特权

评论回复
15
zoomone| | 2011-11-15 10:26 | 只看该作者
技术交锋,别样精彩!:lol

使用特权

评论回复
16
zxcscm| | 2011-11-15 10:37 | 只看该作者
打酱油的路过
每次路过二姨家都会有精彩

使用特权

评论回复
17
highgear| | 2011-11-15 10:37 | 只看该作者
呵呵,笑看刘公公表演.......................

使用特权

评论回复
18
ayb_ice| | 2011-11-15 11:28 | 只看该作者
有些有总是让人讨厌

使用特权

评论回复
19
刘前辈|  楼主 | 2011-11-15 12:34 | 只看该作者
本帖最后由 刘前辈 于 2011-11-15 12:35 编辑

所长真逗,不是赶紧修改自己的程序,以证明自己职业高手的水平,却在这给人讲起了程序规范写法?转移别人注意力?
   
这还真像高晓松清华无线电专业的系主任——给学生讲了半天收音机电路,自己设计出来的收音机却大音若希,沉默是金——还不会调试,不知故障在哪。

“那不是咱们的工作属性,咱们本科生只学习怎样设计,调试、实现是大、中专生的工作,……”     哈……原来这就是清华教授系主任,倒是和所长一个模子。会说不会做,还有十二分道理。

呵呵……看来2位元老工程师气不顺?职业高手“水平”高还是把程序修改好,用程序输出说话为好。

     别人“西安农民工”最简单的调度器都能做到正确输出,老所长如此职业高手写的如此漂亮的调度器却做不到? ...

.
.

     写呀,写不出来别让高晓松什么的都退学啦!难怪讲习所散了……咱菜鸟都等着看所长天赋神功,如何化腐朽为神奇,扭转乾坤呢,让刘前辈,西安农民工这样的菜鸟见鬼去吧!

、、

使用特权

评论回复
20
刘前辈|  楼主 | 2011-11-15 12:40 | 只看该作者
13楼 lxyppc 给个信箱,我把代码发给你。  243654918@qq.com

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:做自己所热爱的,并热爱自己所做的。

24

主题

1038

帖子

4

粉丝