大小断问题的汇总
在涉及到嵌入式编程中,这个问题经常会用到,在常用的CPU系列中,X86采用的是小端模式,而POWERPC采用的是大端模式,FLASH的存储采用的是小端模式,在PPC系统下,经常必须涉及到一个大小端格式转换的问题。
假设现在的系统CPU用的是PPC,将内存中的数据写到FLASH的时候,和从FLASH中读出数据到内存,字节在内存中的存放顺序是不会改变的,如:
一个16位的变量unsign ed short int A,令A = 1(0x0001);
下面是A在内存中的存放顺序。
在PPC平台中 在X86平台下
A A
低 低
01 00------->低8位
00 01------->高8位
高 高
现在在PPC平台下, 现在需要将数据写入到FLASH中,在从FLASH从取出数据到内存中由于FLASH是采用的小端格式,
内存 FLASH 内存
低 低 低
01 01 01------->低8位
00 00 00-------->高8位
高 高 高
由于FLASH中要存储的值必须为1,故内存中的字节存放必须就为左边和右边的那两种形式
但是如果表示的是16位的变量的话,在PPC平台下,这个变量就是0x0100了,代表的就不是1了,故必须要用swap_16()函数交换一下才能得到正确的结果,如果是8位的话,就没这样的问题出现了。这种问题的存在只是针对于至少是16位而言的