红外相对于CCD的最大区别在于前瞻性的不足,理论上说记忆算法可以利用第一圈数据完全弥补这个缺点,所以有人说红外比的就是第二圈的成绩,但从分赛区的比赛情况来看,运用记忆算法的队伍少之又少,不能不说是很大的遗憾。
记忆算法这一纯软件的技术,用的到家一定是相当帅的,但其稳定性相当难以掌握。记忆最为深刻的是今年浙大的一辆赛车,在第一圈稳定的跑完全程后第二圈在直道明显地肆无忌惮的飚起了速度,及时的减速和漂亮的入弯,但在接近终点时,却停在了离起跑线不到1米的地方。想必是第二圈提速后路径较第一圈拉长了,最终导致了提前停车。
我想就我的研究和大家分享一下,说多不多,说少不少,分批分次地依次讲来了~~
今天先讲讲DG128的内存映射。
稍有研究的人一定知道,按照默认映射,DG128的内部寄存器、RAM和EEPROM是重叠的,会损失2K的RAM和全部的EEPROM。
在CW集成开发环境下,修改内存映射需要修改Start12和prm两个文件。
prm文件在我之前的文章里已经介绍过,我是这样处理的,我将RAM映射到0x2000到0x3FFF,并把它分为两部分。从0x2000到0x27FF用来存放程序正常运行时候的常量变量等等,从0x2800到0x3FFF的6K RAM用来存放赛道信息。用RAM的好处在于:一是8K RAM相对比较充裕,二是RAM的写入速度相比于EEPROM要快的多。
将TBDML_linker.prm文件中的
/* RAM */
RAM =
READ_WRITE 0x0400 TO 0x1FFF;
修改如下:
/*EEPROM*/
EEPROM =
READ_WRITE 0x0800 TO 0x0FFF;
/* RAM */
RAM =
READ_WRITE 0x2000 TO 0x27FF;
MY_RAM =
READ_WRITE 0x2800 TO 0x3FFF;
为了是设置生效,还要修改Start12.c文件:
//#ifdef
_HCS12_SERIALMON //注释掉(第113行)
/* 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 //注释掉(第119行)
//#if
defined(_HCS12_SERIALMON) //注释掉(第409行)
/* for Monitor based software remap the RAM &
EEPROM to adhere
to EB386. Edit RAM and EEPROM
sections in PRM file to match these. */
___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 //注释掉(第415行)
这样修改保存之后整个设置就OK了,至于如何存放数据就下回分解了。。。
to be continue...
<>><