IAP是In Application Programming的首字母缩写,IAP是用户自己的程序在运行过程中对User Flash的部分区域进行烧写,目的是为了在产品发布后可以方便地通过预留的通信口对产品中的固件程序进行更新升级。
通常在用户需要实现IAP功能时,即用户程序运行中作自身的更新 *** 作,需要在设计固件程序时编写两个项目代码,第一个项目程序不执行正常的功能 *** 作,而只是通过某种通信管道(如USB、USART)接收程序或数据,执行对第二部分代码的更新;第二个项目代码才是真正的功能代码。
扩展资料
IAP的功能
在应用编程IAP(In-Application Programming)是应用在Flash程序存储器的一种编程模式。它可以在应用程序正常运行的情况下,通过调用特定的IAP程序对另外一段程序Flash空间进行读/写 *** 作,甚至可以控制对某段、某页甚至某个字节的读/写 *** 作,这为数据存储和固件的现场升级带来了更大的灵活性。
参考资料来源:百度百科-IAP
我用C8051F020上实现的一个IAP来举例吧。升级程序的确放在指定位置,因为C8051F020有64K的ROM,所以升级程序就占用ROM最后的4K的空间,前面64K就用来存放用户程序。在每次单片机启动时,放在0000H位置的LJMP指令不是跳转到用户程序,而是直接跳转到了升级程序(60K开始的位置),这里升级程序初始化串口,等待串口发来的数据流,如果数据流的不正确或者没有收到数据流,就跳转回用户程序的入口执行用户上次下载进去的程序。
所以在这里用户的程序不能超过60K,当然升级程序也不会“自宫”,就没什么影响了。
DataAddress被定义成近指针,寻指范围不超过64KB,(u8 NEAR**)表示强制转换成二维指针,即指向指针的指针;
(&DataBuffer[N_ADDR_3])表示取数组DataBuffer的第N_ADDR_3元素的地址;
DataAddress赋值号右边第一个*号,是解指针,对于一个二维指针的解指针,得到的结果仍是指针,是一维指针,赋值给一维指针DataAddress符合类型;
综合起来可以得出,数组DataBuffer的元素存的也是指针,指向最终数据的地址,类型是unsigned char型,对DataAddress解指针,即:
u8 dataValue = 0x00
dataValue = *DataAddress
解指针后即可得到数组DataBuffer[N_ADDR_3]中所存地址中的数据;
讲明白 了吧。全手敲啊,累死我了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)