bootloader,
六,单片机程序注意事项
1,程序空间分配
下载程序的空间应该从0xfff地址向下排放,具体大小需要根据实际的大小及单片机Flash的Block大小来同时决定.空间的安排,一定是Block的倍数.
应用程序的空间是从程序的最低段开始排放,除了中断向量外,不可以有任何代码地址与下载程序重叠.
在用CodeWarrior来写程序时,我们可以修改PRM文件来控制程序排放地址.下面是下载程序的PRM参考代码.
NAMES END SEGMENTS
ROM = READ_ONLY 0xfA00 TO 0xFFAF; Z_RAM = READ_WRITE 0x0070 TO 0x00FF; RAM = READ_WRITE 0x0200 TO 0x086F; ROM2 = READ_ONLY 0xFFC0 TO 0xFFCB; END
PLACEMENT
DEFAULT_RAM INTO RAM;
DEFAULT_ROM, ROM_VAR, STRINGS INTO ROM; _DATA_ZEROPAGE, MY_ZEROPAGE INTO Z_RAM; END
STACKSIZE 0x80
2,程序代码保护
为了使下载程序在任何异常情况下不会被改写,其除了放置引导程序的空间外,均要做代码保护.其在C语言种的参考代码如下.
const unsigned char NVPROT_INIT @0x0000FFBD = 0xFA;.
3,计算机应用程序如何处理单片机应用程序的中断相量表
计算机在应用程序处理该中断相量表时,应根据下载程序的映射关系,将两个字节的相量数据自动计算到对应引导地址,并变为JMP+地址(相量)的模式.下面是参考转变模式.
单片机应用程序复位相量为0x8000,其变为跳转后的代码则为0xCC8000.如本文参考代码,其对应引导地址为0xf9fc,则计算机应用程序则应通知下载程序在0Xf9fc后写0XCC8000三个字节数据,运行完成后,反编译的代码如下: F9FC: JMP 0x8000
3,其它建议
为保证应用程序的正确性,可以在下载程序里判断程序的校验码,可以用16位CRC码等.