OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 194|回复: 2

DMF407 电机开发板中的 BLDC例程,帧头是如何取出的?

[复制链接]

8

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
120
金钱
120
注册时间
2014-9-14
在线时间
17 小时
发表于 2024-10-28 14:20:56 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 sushaowen 于 2024-10-28 14:25 编辑

void debug_handle(uint8_t *data)
{
    uint8_t temp[DEBUG_REV_MAX_LEN];
    uint8_t i;

    if (debug_rev_p >= DEBUG_REV_MAX_LEN)          /* 超过缓冲区(数组)最大长度 */
    {
        debug_rev_p = 0;                           /* 地址偏移量清零 */
    }

    debug_rev_data[debug_rev_p] = *(data);         /* 取出数据,存进数组 */

    if (*data == DEBUG_DATA_END)                   /* 判断是否收到帧尾 */
    {
        if (debug_rev_data[(debug_rev_p + DEBUG_REV_MAX_LEN - 4) % DEBUG_REV_MAX_LEN] == DEBUG_DATA_HEAD)                        /* 数据包长度为5个字节,判断第一个字节是否为帧头 */
        通过debug_rev_p + DEBUG_REV_MAX_LEN - 4) % DEBUG_REV_MAX_LEN运算,是怎么取出帧头的?

最佳答案

查看完整内容[请看2#楼]

(debug_rev_p + DEBUG_REV_MAX_LEN - 4) % DEBUG_REV_MAX_LEN 相当于debug_rev_p -4,但是增加了边界处的处理。 如同钟表(或环形的结构),时针从1点回退两小时,将得到11点,而不是-1点。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

10

主题

3281

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8184
金钱
8184
注册时间
2020-5-11
在线时间
3697 小时
发表于 2024-10-28 14:20:57 | 显示全部楼层
(debug_rev_p + DEBUG_REV_MAX_LEN - 4) % DEBUG_REV_MAX_LEN
相当于debug_rev_p -4,但是增加了边界处的处理。
如同钟表(或环形的结构),时针从1点回退两小时,将得到11点,而不是-1点。
专治疑难杂症
回复

使用道具 举报

8

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
120
金钱
120
注册时间
2014-9-14
在线时间
17 小时
 楼主| 发表于 2024-10-29 09:56:13 来自手机 | 显示全部楼层
LcwSwust 发表于 2024-10-28 14:20
(debug_rev_p + DEBUG_REV_MAX_LEN - 4) % DEBUG_REV_MAX_LEN
相当于debug_rev_p -4,但是增加了边界处的处 ...

这样处理确实高明很多,多谢指教
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 10:02

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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