STM32 的 can 库, 是个最烂的函数库

[复制链接]
3056|14
 楼主| acgean 发表于 2013-6-5 17:22 | 显示全部楼层 |阅读模式
本帖最后由 acgean 于 2013-6-5 17:24 编辑

Message 的数据块不对齐8字节, 如果应用上要用 long 或者 __int64 传递发送数据,很可能会遇到 用法 Fault!
CAN 模块里面的数据寄存器是 32 位, 偏偏处理函数强制转换成八位数, 大大降低效率!
照顾到了 RCR 的远程帧, 却不照顾一下时间戳。

结论, 虽然大家都推荐使用库函数我不反对, 但还请避免使用 CAN 的库函数。
hawksabre 发表于 2013-6-5 18:39 | 显示全部楼层
这个需要好好推敲一下    后面应用时   需要留心一下
airwill 发表于 2013-6-6 09:20 | 显示全部楼层
是啊, 也发现:
CanTxMsg, CanRxMsg 里的数据如果用  long 或者 __int64 传递, 那么编译器的优化等级不能超过 1
否则用法 Fault 哦!
agoodog 发表于 2013-7-12 14:50 | 显示全部楼层
本帖最后由 agoodog 于 2016-12-29 20:40 编辑

有同感啊,CANx->sTxMailBox[transmit_mailbox].TDTR |= TxMessage->DLC;

DLC就是8位的,而邮箱的TDTR 是32位的,是有点浪费

不过,我感觉可以利用上,比如用户要想发送一个源节点和目的节点的ID,可以通过编码的方式放到TDTR 里

这样通过邮箱传的信息量不就更大了??

欢迎讨论。

永远的不知 发表于 2013-7-12 16:19 | 显示全部楼层
mark,收藏
zeluo 发表于 2013-7-12 20:04 | 显示全部楼层
原来是这样啊   以后就不用了   呵呵
tianli1980 发表于 2013-7-13 21:16 | 显示全部楼层
如果只是候简单地去用,它是一个不错的选择,但对它依赖太多,可能对于精细开发是个很大的障碍
baiyunfei.k.f 发表于 2013-7-15 14:09 | 显示全部楼层
学习了
拿起书本 发表于 2013-7-15 15:22 | 显示全部楼层
呵呵,库让刚刚接触STM32的朋友们真是又喜又悲啊,喜的是仅仅调用API就可以了,可以有更到的时间来专注于算法和程序架构的设计,悲的是理解不过来,涉及了太多的宏、结构体、断言、连接符、铺天盖地的头文件.......
sxhhhjicbb 发表于 2013-7-15 16:31 | 显示全部楼层
固的头文件定义的不好。固之间还不兼容。只能说库做得不好。
sxhhhjicbb 发表于 2013-7-15 16:32 | 显示全部楼层
不果不是快速开发,自己写是最好的。当然,有些项目要求快。只能用库了。
hkcj 发表于 2013-7-15 19:14 | 显示全部楼层
确实不是很给力   楼主   顶一个   
hkcj 发表于 2013-7-15 19:15 | 显示全部楼层
有没有高手   有用的比较顺手的资料    上传一下   这样可以学一学   呵呵
pattywu 发表于 2013-10-31 21:39 | 显示全部楼层
    自己改一下,把CanTxMsg, CanRxMsg中DLC改为16位的成员变量,就可以了。
    不要指望ST的库会怎么样好。
香水城主 发表于 2013-11-1 10:25 | 显示全部楼层
如果你能看懂它,每一个都很烂,
您需要登录后才可以回帖 登录 | 注册

本版积分规则

33

主题

446

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部