LAOXU
发表于 2024-4-25 07:06:20
zhx 发表于 2024-4-24 17:25
他这个问题,我也遇到过:
接收1帧的时间是固定的,因为速率固定
1. CAN2接收到中断 --> CAN2接收到的帧 - ...
我想不明白的是, 发送第1帧(+16us时间)
需要 16us时间?
到底做了些什么?
单纯的装载最多 十几字节到缓冲(包括前几个字节命令地址的检查), 用不了 16us 吧?
LAOXU
发表于 2024-4-25 07:14:33
zxcv1973 发表于 2024-4-24 15:55
CAN写发送数据用C语言也能在4us以内(32MHz主频),还是不能用官方例程
官方例程我看了, 标准帧 和 扩展帧 共用一个子函数, 执行时间略长, 粗步分析了一下汇编,
执行时间肯定不到 16US.
你说改写的C语言也能在4us以内(32MHz主频), 我相信没问题.
如再优化一下, 执行时间可更短.
LAOXU
发表于 2024-4-25 07:18:53
楼上哪位, 能否把 CAN 发送帧 示范程序, 上传?
我很好奇, 这16us时间, 通过反汇编, 看看c251 到底干了些什么.
采果农
发表于 2024-4-25 08:38:17
LAOXU 发表于 2024-4-25 07:18
楼上哪位, 能否把 CAN 发送帧 示范程序, 上传?
我很好奇, 这16us时间, 通过反汇编, 看看c251 到底干了些什 ...
兄弟,第三张图就是程序啊
采果农
发表于 2024-4-25 09:18:23
根据各位大佬的提示,我现在做了一下修改
CKCON时钟设为0
CAN中断里面啥都没做,就写BUF了
这样子的写BUF时间是3.2us,帧间隔6.2us
最后,得把发送端函数改成这样
改成这样后写buf时间还是3.2us
帧间隔还是6.2us
那是解决了写BUF时间导致帧间隔过长的问题
启动发送后再去修改TxBuffer的数据
采果农
发表于 2024-4-25 09:22:29
我觉得你们得给我发点积分给我这几天的付出
zhx
发表于 2024-4-25 10:43:25
LAOXU 发表于 2024-4-25 07:06
我想不明白的是, 发送第1帧(+16us时间)
需要 16us时间?
我也不知道楼主在干啥,我只是解释一下他的意思
采果农
发表于 2024-4-25 10:57:21
zhx 发表于 2024-4-25 10:43
我也不知道楼主在干啥,我只是解释一下他的意思
等你做CAN发送就知道了,怎么把总线资源榨干,一个拓展帧是284us加上间隔6.2us,500K总线,满载情况下每秒可以发送3448帧8字节数量的拓展帧,
按我之前那个帖子一楼那样发送,每秒就只能发3267帧
LAOXU
发表于 2024-4-25 11:13:11
采果农 发表于 2024-4-25 10:57
等你做CAN发送就知道了,怎么把总线资源榨干,一个拓展帧是284us加上间隔6.2us,500K总线,满载情况下每 ...
这个理解
zxcv1973
发表于 2024-4-25 11:13:53
采果农 发表于 2024-4-25 09:18
根据各位大佬的提示,我现在做了一下修改
你这个WRITE_CAN是用的宏定义还是用的函数调用?