打印

求救:在51单片机上跑UC/OS出现的问题

[复制链接]
2427|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lianxi47|  楼主 | 2009-2-10 16:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我根据杨屹大虾的《UCOS-ii在51上的移植心得》将uc/os移植到我自己的51硬件板,51单片机使用的是SST89E516RD2,带64K FLASH,板上外扩了32K的RAM,但运行如下程序时,在软件上防真正常,但下载到板子上,程序运行结果就不对,而且每次人工复位,运行的结果还不一样,求完过的高手,帮帮忙

(程序建立了2个任务,1S轮流切换一次,分别是将P1口全部送0,和全部送1,硬件上P1对应8个LED,即实现LED闪烁。(实际下载后, 要么全部亮,要么全部不亮,多复位几次,可能会出现闪烁,但闪几下就不闪了)
#include <includes.h>
#include"function.c"
void TaskStartyya(void *yydata) reentrant;

void TaskStartyyb(void *yydata) reentrant;
OS_STK TaskStartStkyya[MaxStkSize];//注意:我在ASM文件中设置?STACK空间为40H即64。

OS_STK    TaskStartStkyyb[MaxStkSize];
void main(void)
{
    OSInit();   
    OSTaskCreate(TaskStartyya, (void *)0, &TaskStartStkyya[0],2);
    OSTaskCreate(TaskStartyyb, (void *)0, &TaskStartStkyyb[0],3);   
    OSStart();
}


void TaskStartyya(void *yydata) reentrant
{
    yydata=yydata;
    AUXR|=0x02;//禁止内部RAM
     InitTimer0(); 
    for(;;){
        P1=0;
        OSTaskSuspend(3);
        OSTimeDly(50);
        OSTaskResume(3);
        OSTimeDly(50);
         
    }   
}    
    
void TaskStartyyb(void *yydata) reentrant
{    

    yydata=yydata;
    for(;;){
       
    P1=0xff;
    OSTimeDly(50);   
             
    }   
}    

相关帖子

沙发
zyok| | 2009-2-10 16:33 | 只看该作者

先测试一下系统是否移植成功真的跑起来了...

调试的时候尽量把堆栈设置大一点...

使用特权

评论回复
板凳
lianxi47|  楼主 | 2009-2-10 16:46 | 只看该作者

先测试一下系统是否移植成功真的跑起来了...

这个程序已经很简单了,而且在KEIL上防真没问题,而且有时候复位几次就能出现正常的现象,但一会就死了,我再试试把堆栈设大点吧.谢谢

使用特权

评论回复
地板
lianxi47|  楼主 | 2009-2-10 21:48 | 只看该作者

谢谢

谢谢,我去网站看看

使用特权

评论回复
5
xhtxzxw| | 2009-2-10 22:55 | 只看该作者

嘿嘿

51上跑OS,玩乐玩乐

使用特权

评论回复
6
lianxi47|  楼主 | 2009-2-11 07:50 | 只看该作者

问题终于解决了

后来我用KEIL单步执行的时候,发现程序根本无法进入OSINIT(),最后我把ucos_ii.c中包含的文件,全部替代成了源程序,这时候就可以正常运行了。但有时候复位仍然出现不正常的现象,如是我在系统初始化之前加入了一个30ms的延时,这次复位就没有问题。

使用特权

评论回复
7
Airwill| | 2009-2-12 21:18 | 只看该作者

51 上跑 OS , 可以

只是, 跑 UCOS, 委实太难为 mcu 了!

使用特权

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

本版积分规则

21

主题

68

帖子

0

粉丝