智能车制作
标题:
用CODEWARRIOR碰到的一些疑问
[打印本页]
作者:
ouyangguang225
时间:
2009-2-20 18:29
标题:
用CODEWARRIOR碰到的一些疑问
大家好,我在建工程的时候碰到以下问题:
1. 当不用监控程序时:“
另外还需要对于工程文件中 Start12.c中函数 :
void __interrupt 0 _Startup(void) 中
#ifdef _HCS12_SERIALMON
___INITRG = 0x00; /* lock registers block to 0x0000 */
___INITRM = 0x39; /* lock Ram to end at 0x3FFF */
___INITEE = 0x09; /* lock EEPROM block to end at 0x0fff */
#endif
两句宏命令注释掉,使得其中的对于EEPROM,RAM起始位置控制寄存器初始化语句有效。这样,下载后程序可以运行正常。”以上这句话摘自清华大学写的一篇文章,另网上一篇文章又说把Start12.c中
#ifdef _HCS12_SERIALMON
/* for Monitor based software remap the RAM & EEPROM to adhere
to EB386. Edit RAM and EEPROM sections in PRM file to match these. */
#define ___INITRM (*(volatile unsigned char *) 0x0010)
#define ___INITRG (*(volatile unsigned char *) 0x0011)
#define ___INITEE (*(volatile unsigned char *) 0x0012)
#endif的宏去掉,可是我查看其他例程发现他们都没有把以上宏注释掉,非监控模式用BDM下载程序照样可以跑,不知道原因在哪里?
2
.prm
文件默认MC9S12DG128 的RAM 在:
RAM = READ_WRITE 0x0400 TO 0x1FFF;
在这一空间有 1K 的I/O 寄存器空间 和2K EEPROM 空间。使用默认定义会丢失1K RAM 和 2K EEPROM。
这个默认区间必须修改吗?比如修改成
RAM = READ_WRITE 0x2000 TO 0x3FFF;或
RAM = READ_WRITE 0x1000 TO 0x2FFF?
如果一定有必要修改,可是为什么许多例程当中还是用的是默认的RAM定义。
3.假设我把RAM = READ_WRITE 0x0400 TO 0x1FFF修改成了
RAM = READ_WRITE 0x1000 TO 0x2FFF,INITRM这个寄存器的值应该要设置成和
RAM = READ_WRITE 0x1000 TO 0x2FFF相匹配吧。小弟刚入门,忘大侠们多多指教。谢谢了。
作者:
whut_wj
时间:
2009-2-21 09:40
___INITRG = 0x00; /* lock registers block to 0x0000 */
___INITRM = 0x39; /* lock Ram to end at 0x3FFF */
___INITEE = 0x09; /* lock EEPROM block to end at 0x0fff */
这三个是设置RAM EEPROM 映射区的.registers block 是存放和单片机硬件寄存器相关的信息.
你若用监控,那么监控程序要置入FLASH中,需要重新分配.
若是BDM模式烧写程序,PRM文文件的地址映射不用改.
PRM的地址映射和INITEE \INITRM\INITRG 要配合起来改,这点你理解是对的.
欢迎光临 智能车制作 (http://dns.znczz.com/)
Powered by Discuz! X3.2