ant17 发表于 2008-7-25 10:00:08

求教马老师:mega88的bootloader程序怎么退出啊?

mega88的bootloader程序怎么退出啊?
我设置的是这样的
void quit(void)
{
uart_putchar('O');uart_putchar('K');
uart_putchar(0x0d);uart_putchar(0x0a);
   while(!(UCSR0A & 0x20));            
   WatchDog();
   TCCR0B = 0;
   MCUCR = 0x01;
   MCUCR = 0x00;   
   //将中断向量表迁移到应用程序区头部
asm("LDI R30,0X00\n"
   "LDI R31,0X00\n"   
      "jmp 0x0000\n");                //跳转到Flash的0x0000处,执行用户的应用程序

}
但总是退不出boot区
我这是模仿您写的mega128boot程序,现在就是退出bootloader程序有问题
您在mega128的配置是
      
   RAMPZ = 0x00;                  //RAMPZ清零初始化
    asm("jmp 0x0000\n");
但是mega88没有RAMPZ寄存器
我用这样的设置
asm("LDI R30,0X00\n"
   "LDI R31,0X00\n"   
      "jmp 0x0000\n");                //跳转到Flash的0x0000处,执行用户的应用程序

麻烦马老师批评指正!!!谢谢了!!!

machao 发表于 2008-7-25 11:06:41

asm("LDI R30,0X00\n"
   "LDI R31,0X00\n"       ; z寄存器为0      
      "ijmp\n");            ;z-->pc,M88 不支持jmp指令。

请查看器件手册中的指令列表。


另外,用户区必须已经有执行代码了,否则又转到了执行bootloader程序。

ant17 发表于 2008-7-25 16:17:55

谢谢马老师了
根据您的意见修改后我现在确定可以退出boot程序区了,但是现在好象用超级终端写程序的时候,应用程序出了问题

我现在用mega88,超级终端的设置都正确,但是为什么把*.bin程序写完,超级终端显示成功退出boot之后,应用程序还是不能运行???应用程序的*.hex文件烧写后运行得很好,我是用hex2bin.exe转换*.bin文件的,请问下马老师这可能是哪个环节出了问题呢?谢谢您了!

machao 发表于 2008-7-25 21:44:32

确定可以退出boot程序区了.

如何确定退出了?

ant17 发表于 2008-7-28 08:45:07

我在这个汇编指令
PORTD^=0X10;
asm("LDI R30,0X00\n"   
   "LDI R31,0X00\n"      
      "ijmp\n");   
PORTD^=0X20;
         
的前面和后面都加上了测试指令,boot程序运行是用示波器观察,PORTD^=0X10;有波形,而PORTD^=0X20;没有波形.所以我判断推出boot区了.还有一个测试是在汇编指令前后加上uart_putchar('?');语句,通过超级终端看他的输出,也是汇编指令之前有输出,而汇编指令之后没有输出.
当我把*.bin文件写完后,超级终端也显示退出ok,但是应用程序运行不了,不知道是那里出了问题,我的 程序是模仿您mega128的boot程序,前面的过程和现象都和您所描述的一样,但就是*.bin文件写完后不能运行应用程序.我都分析两天了,还请马老师指点!谢谢!

machao 发表于 2008-7-28 14:14:37

写一个简单的死循环的LED闪烁应用程序,编译后生成.hex,转换成.bin,使用正常方式下载(编程器实际也支持.bin格式的),看是否正常。

然后使用你的bootloag下载,看是否可以。

ant17 发表于 2008-7-28 17:54:13

马老师
我刚才用您说的方法试了下,使用正常方式下载.bin文件是可以运行的,但是用bootloag下载后还是出现上述的情况.
而且我用bootloag下载.bin文件后重启,出现的现象是:先执行3s的boot程序,然后显示退出boot程序ok,但应用程序还是不能执行.
是不是我的超级终端的问题呢?
麻烦马老师指教,谢谢!

machao 发表于 2008-7-28 21:40:26

因为这个BIN文件很短,因此你可以通过BOOTLOAD下载后,再通过ISP或JTAG把FLASH中的东西读出来,看从000H开始是否是你的BIN文件内容,然后分析原因。

ant17 发表于 2008-7-30 10:07:06

谢谢马老师!通过读出来flash中的东西后分析
原来我写boot的时候数据顺序出了点问题.惭愧啊!
再次谢谢马老师耐心的指导!

shh8882002 发表于 2012-2-9 21:31:49

回复【8楼】ant17 XMEN
------------------------------------------------------------------
什么数据写反了呢,我也是用mega88,跟你现象一样,能讲下什么数据写反了吗?
页: [1]
查看完整版本: 求教马老师:mega88的bootloader程序怎么退出啊?