51之类简单低速的单片机,程序存放在FLASH中,程序运行时直接从FLASH中取代码,从RAM中取数据。复位以后从FLASH地址0000H开始取程序代码运行,如果是汇编程序,程序初始地址要安排好,在0000H处要跳到主程序入口。如果是C程序,则会有启动代码(自己加的或者是编译器默认的),链接器重新定位各文件的代码在FLASH中的存放地址,程序员大可不必操心。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
现在大多数单片机都有了ISP/IAP功能,单片机在复位时会有些附加动作。
为了实现ISP/IAP功能,芯片厂商都会在芯片内部固化一段BOOT装载程序,用来提供ISP/IAP所需的编程接口,对片内FLASH编程。
ISP:
复位时,BOOT装载程序会先检测ISP条件是否成立,若成立,则在编程状态下经过专用接口(UART,SPI,JTAG等),由外部设备使用预定协议将程序代码写入Flash。然后从FLASH地址的起始地址开始读取代码运行。若ISP条件不成立,则直接运行用户代码。
IAP:
IAP是用户自己的BOOT程序,调用厂家BOOT装载程序的IAP接口,将各种途径得到的数据(在RAM中存储),写入到FLASH中的过程。可以是用来更新程序,或者存储不易变更的数据。
复位后,厂家BOOT装载程序先检测ISP条件,然后从FLASH中取用户代码。用户代码中,包含用户BOOT程序(BOOT程序不一定在最开始工作)。如果IAP条件成立,则用户BOOT程序调用IAP接口将RAM中的数据写入FLASH中。
IAP用来实现程序更新或者数据存时,要根据具体功能合理安排用户BOOT程序的运行时间和规则。
总结:
复位――厂家BOOT装载程序――ISP――用户程序(起始位置)――用户BOOT程序――IAP接口――IAP――用户程序
下划线部分表示非必须步骤。
用户518079 2009-8-11 10:50