强制类型转换:看原子IAP升级例程的问题所引发的测试
时间:02-06 16:02 阅读:2479次
*温馨提示:点击图片可以放大观看高清大图
简介:在看IAP升级时,看了下官方的例程,还参考了战舰板原子的例程。。在其中发现官方例程中都是把uint8_t类型数组直接强转为uint32_t类型然后字编程写入flash,在原子的例程有一个移位的操作,把两个uint8_t移位成uint16_t然后半字编程。。(在实际编程中按字编程的内部操作也是按照按半字编程进行的)。。。开始百思不得其解。。
具体例程中截图如下
官方例程:
原子例程:
以前一直对数组格式的类型转换理解错误,一直以为只是单纯的内存中地址相应的扩大或缩小没理解到大小端的问题。。理解错误了内存中存储以及大小端问题。。自己实际做了个测试。发现强制类型转换跟原子的移位效果是一样的。。
究其原因,认为是在内存中存储的大小端问题。。
实验:定义两个变量然后强制类型转换
uint8_t chartest[2] = {0x01,0x02};
uint16_t shorttest;
强制转换:
while(1)
{
shorttest = *(uint16_t *)chartest;
}
在keil中查看shorttest的值:
与移位的操作,结果一样
分析强制类型转换:
ARM是小端处理器。char a[2],在内存中从低到高存放a[0]→a[1]→。。要把这两个char类型转换为short类型数值。。这两个char类型数在内存中的位置不变,在转换时按照低字节在低位的小端存储方式来转,,,就是a[1]在高8位a[0]在低8位。。。。