RoboVigor / RV-CornerStone

RoboVigor 电控基石
14 stars 5 forks source link

Driver v2.0.0 #164

Closed tccoin closed 3 years ago

tccoin commented 3 years ago

Driver_Bridge旨在向所有总线设备(包括电机、裁判系统、上位机)提供统一的设置、发送、接受端口,它的优势在于:

  1. 可以在bsp.c中调用Bridge_Bind()设置所有总线设备
  2. 不再需要在interrupt.c中修改接受数据的IRQ函数
  3. 简化了Task_Can_Send()(发送的逻辑包装在Bridge_Receive_CAN()中)
  4. 简化了发送协议的流程(自动判断通过CAN还是USART发送)

紧接着会提供一个通过简单配置生成协议(c语言程序)的脚本,希望通过这两者进一步降低配置总线通讯所需的时间与难度。

目前/user/template/已更新接口,欢迎提出修改建议。

tccoin commented 3 years ago
  1. Driver_Bridge: 负责干脏活的,负责建立板子上的通讯接口与抽象的软件接口之间的连接,用例:
    • 串口或CAN中断后数据通过Driver_Bridge传递给Driver_Protocol
    • 通过串口或CAN发送电机或Protocol的数据
    • 按一定频率发送某Protocol
    • 输出报错信息或调试信息
  2. Driver_Protocol:
    • node: channel全部重命名为node,可以看作和主控板通讯的对象(比如裁判系统或上位机)
    • ProtocolInfo: 每个协议都有对应的ProtocolInfo结构体,保存了协议编号、长度、偏移、是否接收及接收计数、发送频率及发送任务
  3. Driver_Gyroscope: 删除config.h中开机解算延迟相关配置,在Gyroscope_Init()参数中配置开机解算延迟
  4. Driver_Magic: 重写,用作调试。
  5. User:
    • 结构简化: main.c: 原bsp.c + handle.c + Task_Sys_Init(), 删除无用文件
    • protocol.h: 全部协议合并进一个文件,通过代码生成;每个用户独立
    • main.c: Task_Sys_Init相关的一行改为CornerStone_Init();

(考虑重新定义版本号为v2.0.0)