[CAN-bus/DeviceNet] 关于CanFestival CANOPEN通讯中的big-endian / little-endian问题。

[复制链接]
 楼主| 发表于 2013-1-25 12:17 | 显示全部楼层 |阅读模式
请教各位:
   关于CanFestival CANOPEN通讯中的big-endian / little-endian问题。

   我分别在STM8S208和STM32F205上移植了CanFestival 的CANOPEN通讯协议;
用于STM8S208 的编译器是IAR Embedded Workbench for STMicroelectronics STM8 V1.31;
用于STM32F205的编译器是MDK-ARM Standard  Version: 4.53.0.0;

   现在,STM32F205能收到STM8S208发送过来的PDO了。
   在STM8S208中,一个16位的变量映射到这个PDO ,STM32F205收到了这个变量,但它的字节顺序时颠倒的.
例如,在STM8S208中变量值是:0x1234;STM32F205收到这个变量却成了:0x3421

我查了一下,IAR、MDK-ARM和CanFestival,都没有big-endian / little-endian之选项.
为之奈何?
难道,我必须写个小函数来扭转乾坤?
请各位教我,若能如愿,不胜感激!
 楼主| 发表于 2013-1-25 13:22 | 显示全部楼层
列位,不要高高挂起呀!
发表于 2013-1-25 20:05 | 显示全部楼层
stm8作为8-bit MCU本无endian之分,但规定其编译器只按big-endian支持(属于ABI范畴吧)。
stm32是ARM Cortex-Mx, 一般是little-endian.
所以在两者互联时,相关数据结构需考虑这一点。
 楼主| 发表于 2013-1-28 00:04 | 显示全部楼层
   这个把戏,害死人啊!
由此可见,遵守统一的标准,是何等的重要啊!
发表于 2013-1-29 08:13 | 显示全部楼层
TECHWELL 发表于 2013-1-28 00:04
这个把戏,害死人啊!
由此可见,遵守统一的标准,是何等的重要啊!

也不是故意耍把戏,两种endian各自有各自的好处。我知道的是,little-endian向后兼容性更好,所以x86发展过来都是little-endian, ARM本来都有,但SoC/MCU厂商,开发者都愿意选择littlen-endian; big-endian效率更高,比如网络字节顺序,Sparc机器也都是big-endian,当初Sun为了整个系统效率更好,把本来是littlen-endia的PCI总线都改成了big-endian,所有的PCI卡都得是他家的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

24

主题

78

帖子

6

粉丝
快速回复 返回顶部 返回列表