打印

有偿求一个国产51_OS

[复制链接]
楼主: 冷漠
手机看帖
扫描二维码
随时随地手机跟帖
21
huangqi412| | 2009-2-25 19:08 | 只看该作者 回帖奖励 |倒序浏览

热起来了

使用特权

评论回复
22
bg6nw| | 2009-2-25 21:26 | 只看该作者

不如搞倆仨MCU来得简单

看样子你这个项目成本不是问题

使用特权

评论回复
23
冷漠|  楼主 | 2009-2-25 22:07 | 只看该作者

所贴代码,正常运行。

ayb_ice 可以设置一下TIMESHARING为0/5,看看任务2(周期5秒)是如何影响任务0和1(周期0.5秒)的。节拍设置10ms。观测效果完全符合“虚拟MCU”的OS理论和协作式内核调度。

您说的:“可以说实际OS里没有任务可以连续运行40MS,而不被任何任务或中断打断,”

不可以连续40ms?所贴程序任务2 连续运行了5000ms。既可以强迫任务0和1等待,(TIMESHARING=0) 也可以中止任务2使任务0和1实时运行,(TIMESHARING=5)。

只是项目要求不允许中途中止任务2(大概磁盘步进电机一类不可能频繁断开,反正咱也不懂。),否则就没有难度了。

现在买了美国的51_OS,它很容易就实现了。它是怎么做的?我们为什么不行?学长当年也是用的美国人的OS完成的。3000元想支持国人的51_OS,结果一条程序也没求到。
指望HOT的TASK51,还遥遥无期。而且HOT的TASK51功能说明里还没考虑做处理这类问题的系统函数调用。还不能说清老外是怎么做的。

#include<reg51.h>
#include <rtx51tny.h>

sbit LED0=P1^0;
sbit LED1=P1^1;
sbit LED2=P1^2;

void delayms(unsigned int ms)    
// 延时子程序
{                        
    unsigned char i;
    while(ms--)
    {
    for(i = 0; i < 120; i++);
    }
}

void LED00 (void) _task_ 0
 
{
     os_create_task(1);//创建进程1

     os_create_task(2);//创建进程2

    while(1)
     {
     LED0=! LED0;  
     os_wait2(K_TMO,50);    //延时50节拍
      } 
  }


//进程1 
void LED01 (void) _task_ 1
{
    while(1)
     {
       LED1=! LED1;  
      os_wait2(K_TMO,50);      //延时500ms
            } 
  }


//进程2
void LED02 (void) _task_ 2
{

    while(1)
     {
       LED2=! LED2;  
         delayms(5000);    //延时5S
           os_wait2(K_TMO,50);     //任务切换            } 
  }

使用特权

评论回复
24
常来21ic| | 2009-2-25 23:11 | 只看该作者

再搬个板凳

使用特权

评论回复
25
highgear| | 2009-2-25 23:23 | 只看该作者

兰州烧饼-- 鉴定完毕。

一看1952烧饼们的所谓任务,就知道1952烧饼们狗P不懂。
一个结论:1952烧饼们根本没有做过什么实际的东西。如此简单的东西,如同那个crc 一样,被1952烧饼们当作不得了的技术。我相信,这里起码有一半以上的人,做过比这复杂若干倍的东西。

1952烧饼们无非玩弄一下小伎俩:你看,我的_task_ 2没有中断吧,什么?os还在跑,在中断?扯淡!这是美国的os,你们算什么!哪里有中断?没有么!即使有我还可以把中断完全关闭! 什么,关闭了数据采集怎么办?数据采集在跑啊,你没看见_task_ 1么?这是美国的os啊!美国牛啊....不用os怎么可能做出来啊,我1952牛啊!美国的os都懂啊!所有提问题的人都蠢啊!反正,你在5000ms中断了运行数据采集,我可以攻击你傻,你不中断不运行数据采集,我也可以攻击你蠢!我1952牛啊.......

使用特权

评论回复
26
highgear| | 2009-2-25 23:26 | 只看该作者

兰州烧饼-- 鉴定完毕。

一看1952烧饼们的所谓任务,就知道1952烧饼们狗P不懂。
一个结论:1952烧饼们根本没有做过什么实际的东西。如此简单的东西,如同那个crc 一样,被1952烧饼们当作不得了的技术。我相信,这里起码有一半以上的人,做过比这复杂若干倍的东西。

1952烧饼们无非玩弄一下小伎俩:你看,我的_task_ 2没有中断吧,什么?os还在跑,在中断?扯淡!这是美国的os,你们算什么!哪里有中断?没有么!即使有我还可以把中断完全关闭! 什么,关闭了数据采集怎么办?数据采集在跑啊,你没看见_task_ 1么?这是美国的os啊!美国牛啊....不用os怎么可能做出来啊,我1952牛啊!美国的os都懂啊!所有提问题的人都蠢啊!反正,你在5000ms中断了运行数据采集,我可以攻击你傻,你不中断不运行数据采集,我也可以攻击你蠢!我1952牛啊.......

使用特权

评论回复
27
mikezhong| | 2009-2-26 00:00 | 只看该作者

呵呵.

我以为是什么高手,....

使用特权

评论回复
28
bob.xue| | 2009-2-26 00:04 | 只看该作者

兰州烧饼? 有名气不

(此广告楼只卖兰州牌的!)

使用特权

评论回复
29
xsl.| | 2009-2-26 00:11 | 只看该作者

晕,问题解决了,俺的生意泡汤了

使用特权

评论回复
30
常来21ic| | 2009-2-26 09:13 | 只看该作者

看不懂

不知道问题解决没有,偶还等着看热闹呢

使用特权

评论回复
31
computer00| | 2009-2-26 09:46 | 只看该作者

用DMA采集或许可以做到哦~~~程序不用干预

使用特权

评论回复
32
xsl.| | 2009-2-26 10:03 | 只看该作者

LS开阔了思路

用FPGA也可以实现

使用特权

评论回复
33
一朝成名| | 2009-2-26 10:51 | 只看该作者

很遗憾,没看到编辑完之前的帖子

别的没看出来什么,到是lz和学长和师长说话口吻口气如出一辙

我对这很好奇,难不成什么老师教出来什么学生

使用特权

评论回复
34
wswh2o| | 2009-2-26 11:02 | 只看该作者

24楼什么意思呀

狠狠不明白,

使用特权

评论回复
35
mohanwei| | 2009-2-26 11:04 | 只看该作者

对24楼的代码叹为观止……


估计都不清楚操作系统的原理……

使用特权

评论回复
36
有风| | 2009-2-26 13:09 | 只看该作者

不懂操作系统,存盘任务可不可以划分成若干时间片去做呢?

任务A,B,C依次按顺序运行.
只是因为任务C的运行时间太长,
可以划分成40个时间片段,每片1ms,

一个时间片段处理一部分内容.

void main()
{
    System_init();
    while(1)
    {
        TaskA();
        TaskB();
        TaskC();
        idle();
     }
}
Void TaskA(void)
{
    if(flag.bit.TaskAEN)
    {
        flag.bit.TaskAEN = 0;
        ;
    }
}
__interrupt void TmrInt(void)   // 1ms int
{
    timer_10ms++;
    if(timer_10ms == 10)
        flag.bit.TaskAEN = 1;
}

使用特权

评论回复
37
soso| | 2009-2-26 13:22 | 只看该作者

推荐南瓜OS

   不用花钱,Salvo lite(免费版),支持3任务,占用RAM,ROM少到你不相信的地步。以前40RMB的MCU要做的工作在南瓜salvo下10RMB的MCU就完成了!

使用特权

评论回复
38
ayb_ice| | 2009-2-26 20:37 | 只看该作者

昨天没有时间

今天楼盖这么高了。
我的观点都是指实际应用中的情况,当然理论是另外一回事。
首先必须承认,其实任何任务都是可以被分解成片的,不管是在RTOS还是裸奔中,只有最高优先级的中断或任务可以占用CPU,那么也就是说只有一个任务可以在任何需要的时候占用CPU,其次现在的RTOS一般都是抢先与轮转共享的类型,情况是即使最高优先级的任务也可能被强行释放CPU。
除非程序关闭中断。

使用特权

评论回复
39
highgear| | 2009-2-26 22:10 | 只看该作者

ayb_ice说得好,mohanwei是明眼人。

1952sb们显然没有明白os的基本原理,以为那5000ms是绝对的独占,更没有实际的经验,否则不会不知道“不可以连续运行40MS,而不被任何任务或中断打断“对于mcu设计的意义,可以这么说:除非绝对极端的应用,设计出连续绝对独占40ms mcu 的程序员,绝对是低手。

跟一群笨蛋较劲真没意思。

使用特权

评论回复
40
zyok| | 2009-2-26 22:12 | 只看该作者

路过

使用特权

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

本版积分规则