打印
[CAN-bus/DeviceNet]

关于CanFestival CANOPEN通讯中的big-endian / little-endian问题。

[复制链接]
3664|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
TECHWELL|  楼主 | 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之选项.
为之奈何?
难道,我必须写个小函数来扭转乾坤?
请各位教我,若能如愿,不胜感激!

相关帖子

沙发
TECHWELL|  楼主 | 2013-1-25 13:22 | 只看该作者
列位,不要高高挂起呀!

使用特权

评论回复
板凳
ymind| | 2013-1-25 20:05 | 只看该作者
stm8作为8-bit MCU本无endian之分,但规定其编译器只按big-endian支持(属于ABI范畴吧)。
stm32是ARM Cortex-Mx, 一般是little-endian.
所以在两者互联时,相关数据结构需考虑这一点。

使用特权

评论回复
地板
TECHWELL|  楼主 | 2013-1-28 00:04 | 只看该作者
   这个把戏,害死人啊!
由此可见,遵守统一的标准,是何等的重要啊!

使用特权

评论回复
5
ymind| | 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卡都得是他家的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

19

主题

64

帖子

5

粉丝