单片机如何实现IAP升级啊?升级程序应该在制定的位置吧,要不它也就被擦除了吧?只能升级其他的ROM吧?

单片机如何实现IAP升级啊?升级程序应该在制定的位置吧,要不它也就被擦除了吧?只能升级其他的ROM吧?,第1张

我用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]中所存地址中的数据;

讲明白 了吧。全手敲啊,累死我了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12427329.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存