wpybuaa 发表于 2006-2-18 10:55:34

我的ucos在用IAP下载到mega32后为什么不工作了?

我的ucos在用IAP下载到mega32后为什么不工作了?

我在bootload程序中用到了定时器0,ucos负责任务切换的是定时器2。哪位高手分析一下会是什么问题。谢谢!!

HJJourAVR 发表于 2006-2-18 11:36:03

直接烧录时UCOS行不行?



可以读出FLASH里面的内容对比看看IAP是否正确。

wpybuaa 发表于 2006-2-18 11:41:35

直接烧录ucos工作正常

wpybuaa 发表于 2006-2-18 11:45:57

读出的IAP没有变化,而且开机可以提示下载,也能下载

HJJourAVR 发表于 2006-2-18 11:52:52

是对比编译UCOS生成的BIN文件,不是HEX文件。

读出FLASH里面的内容和BIN文件对比,看看数据是否匹配。

wpybuaa 发表于 2006-2-18 11:56:53

好,我试试 谢谢!

wpybuaa 发表于 2006-2-18 12:07:20

HJJourAVR您好!我将读出的文件存为bin格式,然后与烧录的bin文件对比,并没有变化。是不是我的程序本身有问题,是否与堆栈设置有关?

HJJourAVR 发表于 2006-2-18 12:17:05

确认IAP的最后动作是 JMP 0x0000H 而且 中断向量位于应用程序库区 ?

wpybuaa 发表于 2006-2-18 12:21:17

我的quit程序如下:

void quit(void)

{

   uart_putchar('O');

   uart_putchar('K');

   uart_putchar(0x0d);

   uart_putchar(0x0a);

   while(!(UCSRA & 0x20)); //等待结束提示信息回送完成

   MCUCR = 0x01;

   MCUCR = 0x00;            //将中断向量表迁移到应用程序区头部

//   RAMPZ = 0x00;            //RAMPZ清零初始化

   asm("jmp 0x0000
");                //跳转到Flash的0x0000处,执行用户的应用程序

}

wpybuaa 发表于 2006-2-18 12:24:19

下载后能显示任务1的初始画面,但是不能任务切换

wpybuaa 发表于 2006-2-18 13:28:44

HJJourAVR 您好!我测试了几次发现当我配置BOOTRST=1时,即复位从程序区运行,ucos工作是正常的,当我配置BOOTRST=0时ucos就不切换了。ucos是用IAP下载的.想请教HJJourAVR这会是什么造成的。谢谢!

HJJourAVR 发表于 2006-2-18 13:40:45

应用程序(ucos)需要把所有外设的功能寄存器重新赋初值。

你的UCOS没有考虑所有外设的[上电初始化值]已经可能被IAP所更改。

wpybuaa 发表于 2006-2-18 21:47:54

终于调出来了!!

我在主程序开头加入了如下代码

main ()

{

        ///-------------------------

        PORTA=0;

        DDRA =0;

        PORTB=0;

        DDRB =0;

        PORTC=0;

        DDRC =0;

        PORTD=0;

        DDRD =0;

        UDR=0;

        UCSRA=0x20;

        UCSRB=0;

        UCSRC=0x86;

        UBRRH=0;

        UBRRL=0;

        SFIOR=0;

       

        TIMSK=0;

        TCNT2=0;

        TCCR2=0;

        ///-------------------------

        OSInit();                // OS init

......

}

即将端口寄存器和串口和管任务切换定时器2的寄存器都作了初始化,问题解决。谢谢HJJourAVR 的指点!
页: [1]
查看完整版本: 我的ucos在用IAP下载到mega32后为什么不工作了?