cnxmx 发表于 2005-7-21 21:59:09

ucos程序运行出错?

调试ucos程序时(如下),发现运行到程序OSTimeSet(0);句时总是进入databort,跟踪调试发现是

OS_EXIT_CRITICAL() 句执行进入下面汇编语句出错:

ARMEnableInt
LDMFD sp!, {r0}    ; pop current PSR
MSRcpsr_c, r0    ; restore original cpsr
MOVpc, lr                                       (在该句出错)

pc指向0xffffffff地址,且内容也为0xfffffff

按道理前面执行基本初始化程序,PC不应该跑飞啊,斑竹能否指点下???

---------------------------------------------------------------------------------------



附主程序:

void Main(void)
{

char Id0 = '1';
char Id1 = '2';
char Id3 = '4';

ARMTargetInit();

Uart_Printf("\n\n\n\n\n");
Uart_Printf("   ******************************\n");
Uart_Printf("   *   uCos demo code    *\n");
Uart_Printf("   *******************************\n");
Uart_Printf("\n\n");
Delay(100);

OSInit();

OSTimeSet(0);
   
UartSem = OSSemCreate(1);
KeySem = OSMboxCreate((void *)0);
    /*
   * create the tasks in uC/OS and assign decreasing
   * priority to them
   */
OSTaskCreate(TaskStart, (void *)&Id0, (void *)&Stack0, 1);
OSTaskCreate(TaskLED, (void *)&Id1, (void *)&Stack1, 51);
OSTaskCreate(lwip_init_task, (void *)&Id3, &lwip_init_stk, 2);
      
    /* Start thesystem running */
ARMTargetStart();

    /* start the system */
OSStart();

    /* never reached */
}

limingth 发表于 2005-7-22 01:37:59

OSTimeSet(0);做了什么事情?

cnxmx 发表于 2005-7-22 12:26:04

OSTimeSet()是UCOS提供的函数,设置系统时钟节拍的

我这个程序是移植Lwip,会不会是因为我在是否是因为我在lwip程序里用了_packed关键字的问题?

可是就算这样也应该是等UCOS启动后才会出现这样的问题吧,现在好象是在启动中断ARMEnableInt 时有问题啊???

会是什么问题呢??

limingth 发表于 2005-7-23 09:51:09

mov 指令执行前, lr 的值是多少?

cnxmx 发表于 2005-7-24 20:26:51

呵呵,真是感谢liming斑主了,今天有看了看程序啊,还是没能搞定,头都大了!原来以为lwip应该可以轻松搞顶的,现在看来自己编程基础还差了点啊!

lwip 部分程序我是参考skyeye的,移植到ADS上,几处关键的部分感觉都改了,应该没问题啊.现在有问题是:lwip程序里用到_packed关键字,才会导致程序不能运行的?
但似乎应该是运行ucos任务后才能跳到lwip程序里,现在ucos根本没启动起来啊,在别的ucos程序却没有这种情况啊? 快要崩溃了,呵呵!

仔细看了下,在执行句MOV pc, lr ,之前lr里面内容竟为0啊,这就奇怪了??? AXD还有以下提示:
DBT Warning 00008: Already at base of stack.

十分感谢李明斑竹的帮助啊!!!

limingth 发表于 2005-7-25 10:28:50

ARMTargetStart(); 是不是应该放到 第一个任务里面去运行? 这样比较正规。
还有就是 ARM ADS 对 C 的 packed 的支持似乎不怎么好用, 我后来都是直接用 4 个字节定义内部数据结构的。这个在 ARMCC 编译器里面支持 packed 定义的问题你可以花点时间测试和验证一下。
页: [1]
查看完整版本: ucos程序运行出错?