4477|6

2131

帖子

0

TA的资源

至上芯片

楼主
 

大家在linux与ucos上遇到的问题集中发帖吧!我们会帮您解决! [复制链接]

 linux与ucos上遇到的问题:。。。。。。。。。

最新回复

这个程序我感觉没什么问题  可是一下载到单片机中就没反应了   程序停止再DISPLAY(1)  中间  而DISPLAY(2)  根本就不会执行  只有把两个DISPLAY函数中间的时间延时函数取掉才可以   但是两个显示 1  和 2  太快了      是不是程序太大了?  我觉得没啥问题啊   编译后 data是115.0   xdata 227.0  code   6540   我用的是AT89C52单片机  应该能装下啊 /* 本例程uCOS-II 版本为2.51,仅创建一个LED闪烁任务于 P1.0 上,每隔 0.5 秒闪动一次,任务而此例程运行于内 RAM > 300 Byte 的51内核单片机即可。*/   #include "includes.h" //#include "stdio.h" sbit LED=P1^7; sbit LED1=P1^6; sbit dula=P2^6; sbit wela=P2^7; INT8U err;          INT8U code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; OS_EVENT *semp; OS_STK TaskStartStk[MaxStkSize+1]; OS_STK MyTaskStk[MaxStkSize+1]; OS_STK YouTaskStk[MaxStkSize+1]; void Task(void *ppdata); void MyTask(void *ppdata); void YouTask(void *ppdata); void DigInit(); void Display(INT8U num); void main(void) {                          DigInit();         OSInit();         InitHardware();         semp=OSSemCreate(0);         OSTaskCreate(Task,(void*)0,&TaskStartStk[0],0);         OSStart(); } void Task(void *ppdata) {         ppdata=ppdata;         OSTaskCreate(MyTask,(void*)0,&MyTaskStk[0],1);         OSTaskCreate(YouTask,(void*)0,&YouTaskStk[0],2);         for(;;)             {                 LED=~LED;         OSTimeDly(OS_TICKS_PER_SEC/2);             }    } void MyTask(void *ppdata) {         INT8U temp;                 ppdata=ppdata;         for(;;)         {                                 P3=0xfd;                 temp=P3;                 temp=temp&0xf0;                 if(temp!=0xf0)                 {                         OSTimeDly(1);                         temp=P3;                         temp=temp&0xf0;                         if(temp!=0xf0)                         {                                 temp=P3;                                 switch(temp)                                 {                                         case 0xed:  OSSemPost(semp);                                         break;                                     case 0xdd:                                           break;                                         case 0xbd:                                         break;                                         case 0x7d:                                         break;                                 }                         }                                         }                 OSTimeDly(1);         }         } void YouTask(void *ppdata) {           ppdata=ppdata;                 for(;;)         {                 OSSemPend(semp,0,&err);                 Display(1);                                                     OSTimeDly(50);        //就是这里一加上延时 程序就不会往下继续执行了                 OSSemPend(semp,0,&err);                 Display(2);         } } void DigInit() {         dula=1;         P0=table[0];         dula=0;         wela=1;         P0=0xc0;         wela=0; } void Display(INT8U num) {                 dula=1;                 P0=table[num];                 dula=0;        }  详情 回复 发表于 2009-4-20 16:20
点赞 关注
个人签名处处留心皆学问!
 

回复
举报

40

帖子

0

TA的资源

纯净的硅(初级)

沙发
 

Re: [讨论] 大家在linux与ucos上遇到的问题集中发帖吧!我们会帮您解决!

多谢了!正在学习中。
 
 
 

回复

477

帖子

0

TA的资源

五彩晶圆(高级)

板凳
 

Re: [讨论] 大家在linux与ucos上遇到的问题集中发帖吧!我们会帮您解决!

编译gcc3.4。。。。。残念啊
 
 
 

回复

2131

帖子

0

TA的资源

至上芯片

4
 

Re: [讨论] 大家在linux与ucos上遇到的问题集中发帖吧!我们会帮您解决!

那个就要靠你自己慢慢学了,呵呵
努力吧!
 
个人签名处处留心皆学问!
 
 

回复

2万

帖子

74

TA的资源

管理员

5
 

Re: [讨论] 大家在linux与ucos上遇到的问题集中发帖吧!我们会帮您解决!

不错的主意,赞下~~
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
 
个人签名

加油!在电子行业默默贡献自己的力量!:)

 
 

回复

3

帖子

0

TA的资源

一粒金砂(中级)

6
 

楼主帮忙看看这个怎么回事丫

这个程序我感觉没什么问题  可是一下载到单片机中就没反应了   程序停止再DISPLAY(1)  中间  而DISPLAY(2)  根本就不会执行  只有把两个DISPLAY函数中间的时间延时函数取掉才可以   但是两个显示 1  和 2  太快了      是不是程序太大了?  我觉得没啥问题啊   编译后 data是115.0   xdata 227.0  code   6540   我用的是AT89C52单片机  应该能装下啊



/* 本例程uCOS-II 版本为2.51,仅创建一个LED闪烁任务于 P1.0 上,每隔 0.5 秒闪动一次,任务而此例程运行于内 RAM > 300 Byte 的51内核单片机即可。*/  

#include "includes.h"
//#include "stdio.h"
sbit LED=P1^7;

sbit LED1=P1^6;
sbit dula=P2^6;
sbit wela=P2^7;
INT8U err;         


INT8U code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};

OS_EVENT *semp;

OS_STK TaskStartStk[MaxStkSize+1];
OS_STK MyTaskStk[MaxStkSize+1];
OS_STK YouTaskStk[MaxStkSize+1];



void Task(void *ppdata);
void MyTask(void *ppdata);
void YouTask(void *ppdata);
void DigInit();
void Display(INT8U num);


void main(void)
{
                
        DigInit();
        OSInit();
        InitHardware();
        semp=OSSemCreate(0);
        OSTaskCreate(Task,(void*)0,&TaskStartStk[0],0);


        OSStart();

}
void Task(void *ppdata)
{

        ppdata=ppdata;
        OSTaskCreate(MyTask,(void*)0,&MyTaskStk[0],1);
        OSTaskCreate(YouTask,(void*)0,&YouTaskStk[0],2);
        for(;;)
            {

                LED=~LED;
        OSTimeDly(OS_TICKS_PER_SEC/2);
            }   
}
void MyTask(void *ppdata)
{
        INT8U temp;
       
        ppdata=ppdata;
        for(;;)
        {
               
                P3=0xfd;
                temp=P3;
                temp=temp&0xf0;
                if(temp!=0xf0)
                {
                        OSTimeDly(1);
                        temp=P3;
                        temp=temp&0xf0;
                        if(temp!=0xf0)
                        {
                                temp=P3;
                                switch(temp)
                                {
                                        case 0xed:  OSSemPost(semp);
                                        break;
                                    case 0xdd:  
                                        break;
                                        case 0xbd:
                                        break;
                                        case 0x7d:
                                        break;
                                }
                        }
                       
                }

                OSTimeDly(1);
        }
       
}
void YouTask(void *ppdata)
{  
        ppdata=ppdata;

       
        for(;;)
        {

                OSSemPend(semp,0,&err);
                Display(1);                                    
                OSTimeDly(50);        //就是这里一加上延时 程序就不会往下继续执行了
                OSSemPend(semp,0,&err);
                Display(2);
        }
}
void DigInit()
{

        dula=1;
        P0=table[0];
        dula=0;
        wela=1;
        P0=0xc0;
        wela=0;
}
void Display(INT8U num)
{
                dula=1;
                P0=table[num];
                dula=0;       
}
 
 
 

回复

2131

帖子

0

TA的资源

至上芯片

7
 

Re: [讨论] 大家在linux与ucos上遇到的问题集中发帖吧!我们会帮您解决!

OSSemPost(semp);执行到了吧

如果semp在上面已经发出来了执行到下面的
                OSSemPend(semp,0,&err);
                Display(1);                                    
                OSTimeDly(50);                 //就是这里一加上延时 程序 会向下执行的
                OSSemPend(semp,0,&err); 在等待
                Display(2);

你的信号量是无限等待的,你可以加上一下超时的等待,显示中加入是否等到的判断!
如果可以仿真那就可以看到程序走到哪里了,你可以跟踪一下!

赞赏

1

查看全部赞赏

 
个人签名处处留心皆学问!
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表