导读:目前正在解读《强制类型转换:看原子IAP升级例程的问题所引发的测试》的相关信息,《强制类型转换:看原子IAP升级例程的问题所引发的测试》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《强制类型转换:看原子IAP升级例程的问题所引发的测试》的详细说明。
简介:在看IAP升级时,看了下官方的例程,还参考了战舰板原子的例程。。在其中发现官方例程中都是把uint8_t类型数组直接强转为uint32_t类型然后字编程写入flash,在原子的例程有一个移位的操作,把两个uint8_t移位成uint16_t然后半字编程。。(在实际编程中按字编程的内部操作也是按照按半字编程进行的)。。。开始百思不得其解。。

具体例程中截图如下

官方例程:

强制类型转换:看原子IAP升级例程的问题所引发的测试

原子例程:

强制类型转换:看原子IAP升级例程的问题所引发的测试

以前一直对数组格式的类型转换理解错误,一直以为只是单纯的内存中地址相应的扩大或缩小没理解到大小端的问题。。理解错误了内存中存储以及大小端问题。。自己实际做了个测试。发现强制类型转换跟原子的移位效果是一样的。。

究其原因,认为是在内存中存储的大小端问题。。

实验:定义两个变量然后强制类型转换

uint8_t chartest[2] = {0x01,0x02};

uint16_t shorttest;

强制转换:

while(1)

{

shorttest = *(uint16_t *)chartest;

}

在keil中查看shorttest的值:

强制类型转换:看原子IAP升级例程的问题所引发的测试

与移位的操作,结果一样

分析强制类型转换:

ARM是小端处理器。char a[2],在内存中从低到高存放a[0]→a[1]→。。要把这两个char类型转换为short类型数值。。这两个char类型数在内存中的位置不变,在转换时按照低字节在低位的小端存储方式来转,,,就是a[1]在高8位a[0]在低8位。。。。

提醒:《强制类型转换:看原子IAP升级例程的问题所引发的测试》最后刷新时间 2024-03-14 00:53:44,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《强制类型转换:看原子IAP升级例程的问题所引发的测试》该内容的真实性请自行鉴别。