找回密码
 立即注册
楼主: 采***

STC32G的2组CAN模块的缓冲区读写不够快,后续CAN-FD新品建议优化提升

[复制链接]
  • TA的每日心情
    开心
    昨天 03:18
  • 签到天数: 137 天

    [LV.7]常住居民III

    37

    主题

    873

    回帖

    3992

    积分

    荣誉版主

    积分
    3992
    发表于 2024-4-24 06:40:23 | 显示全部楼层
    神农鼎 发表于 2024-4-23 23:16
    明请乘风帮用 42MHz, 汇编实际跑下,
    能否解决你这个500K双CAN的速度问题。

    最近在做一个项目,基本功能就是把CAN2接收到的帧通过CAN1发送出去,中间做点转换

    -----------------------------------------------------------------------------------------------------------------

    没用的,  单纯把 CAN2接收到的帧 写入 CAN1 发送缓冲区, 用不了多少时间,
    30MHz下, C(1-2us), asm(<1us),
    关健点是 用户 中间做点转换. 这个时间可能比较长超差.

    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 03:18
  • 签到天数: 137 天

    [LV.7]常住居民III

    37

    主题

    873

    回帖

    3992

    积分

    荣誉版主

    积分
    3992
    发表于 2024-4-24 06:50:28 | 显示全部楼层
    我不知楼主的转换程序格式, 估计是这样写的,
    CAN2接收中断 --> CAN2接收到的帧 --> 读入+转换 --> 写入 CAN1 发送缓冲区,
    这个程序执行时间估计超时.

    建议换种格式:
    1.   CAN2接收到中断 --> CAN2接收到的帧 --> 读入+转换 --> 写入 buff 缓冲区
    2.   CAN1发送完中断 --> buff 缓冲区 ---> CAN1发送帧 --> 启动发送

    这样, 哪怕用 11.0592MHz , 时间估计也足够不会超差.

    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 03:18
  • 签到天数: 137 天

    [LV.7]常住居民III

    37

    主题

    873

    回帖

    3992

    积分

    荣誉版主

    积分
    3992
    发表于 2024-4-24 07:03:20 | 显示全部楼层
    4组串口UART使用DMA收发 @STC32G,易用,高效,稳定 !精品实战代码
    https://www.stcaimcu.com/forum.php?mod=viewthread&tid=5211
    (出处: 国芯论坛-STC全球32位8051爱好者互助交流社区)

    这个贴子里面的争论, 建议楼主思考一下.
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    6 天前
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    1

    主题

    26

    回帖

    183

    积分

    注册会员

    积分
    183
     楼主| 发表于 2024-4-24 08:42:41 | 显示全部楼层
    LAOXU 发表于 2024-4-24 07:03
    4组串口UART使用DMA收发 @STC32G,易用,高效,稳定 !精品实战代码
    https://www.stcaimcu.com/forum.php?mod ...

    你这是串口,不一样的东西
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    6 天前
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    1

    主题

    26

    回帖

    183

    积分

    注册会员

    积分
    183
     楼主| 发表于 2024-4-24 08:54:05 | 显示全部楼层
    LAOXU 发表于 2024-4-24 06:50
    我不知楼主的转换程序格式, 估计是这样写的,
    CAN2接收中断 --> CAN2接收到的帧 --> 读入+转换 --> 写入 CA ...

    我这个说的问题不是软件层面的问题哦,你可能没有仔细看。

    平时串口是一个字节一个字节发送,发送中断来的时候直接写一个字节就行,而且写这个字节是直接寻址的,这个时候速度快。这个可能1us内就能执行完成

    CAN这个不一样,CAN这个发送中断来了以后,要往BUF写16个字节,而且还是间接写入寄存器,写入一个字节的时间翻倍,再加上中间需要判断buf3,运行时间就拉长了。这个在我的程序中和执行了16us。

    就算使用汇编节省50%的时间也要8us,还是跟不上接受的速度

    你看看16楼的比喻就懂了,,,,而且我目前这个程序没有转换操作,就是有转换操作也不会在中断里执行,中断里现在就是写发送FIFO的时间
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 03:18
  • 签到天数: 137 天

    [LV.7]常住居民III

    37

    主题

    873

    回帖

    3992

    积分

    荣誉版主

    积分
    3992
    发表于 2024-4-24 09:46:21 | 显示全部楼层
    STC32 间接写不慢(不是 51), 而且可以字操作读写(比字节操作快 1倍).
    若是可以的话, 请把核心 CAN2-->CAN1 读写程序, 打包个函数(能成功编译) 发上来.
    一起帮忙看看, 能否进一步优化,  我估计 30MHz的主频,  3us以内的时间足够.
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 03:18
  • 签到天数: 137 天

    [LV.7]常住居民III

    37

    主题

    873

    回帖

    3992

    积分

    荣誉版主

    积分
    3992
    发表于 2024-4-24 09:58:54 | 显示全部楼层
    另外, BUFF缓冲区是否放在片内 EDATA ?  如放在片外 XDATA 中, 速度要慢此.

    我想起来了, 以前我也犯过此错误, 片内 MCU 扩展 RAM 数据总线时钟控制寄存器(CKCON)
    是否开机时设置为 0 ?  上电复位值为 7(指令执行时间慢 7倍) , 如没设置, 则执行 时间 16MS 也正常.
    请检查一下.



    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    6 天前
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    1

    主题

    26

    回帖

    183

    积分

    注册会员

    积分
    183
     楼主| 发表于 2024-4-24 10:11:45 | 显示全部楼层
    LAOXU 发表于 2024-4-24 09:58
    另外, BUFF缓冲区是否放在片内 EDATA ?  如放在片外 XDATA 中, 速度要慢此.

    我想起来了, 以前我也犯过此错 ...

    等你们乘风做完实验再说吧
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    1

    主题

    113

    回帖

    629

    积分

    高级会员

    积分
    629
    发表于 2024-4-24 11:41:58 | 显示全部楼层
    LAOXU 发表于 2024-4-24 09:46
    STC32 间接写不慢(不是 51), 而且可以字操作读写(比字节操作快 1倍).
    若是可以的话, 请把核心 CAN2-->CAN1  ...

    XFR寄存器不支持字操作,并且CAN模块操作效率确实很低,这种外挂模块连地址自动增1都不支持

    点评

    刚才实测了一下, c251 支持 XFR寄存器字操作(不支持SFR寄存器字操作).  详情 回复 发表于 2024-4-24 15:25
    Keil C251 有缺陷, 不支持 XFR寄存器 字操作, 但 汇编支持.  详情 回复 发表于 2024-4-24 13:50
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    1

    主题

    113

    回帖

    629

    积分

    高级会员

    积分
    629
    发表于 2024-4-24 11:47:50 | 显示全部楼层
    想效率高,就不能用官方提供的例程
    回复 支持 反对 送花

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-5-4 23:09 , Processed in 0.067592 second(s), 64 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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