打印

GD32E103 USB库文件中 可以优化指令的点滴

[复制链接]
1806|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lvben5d|  楼主 | 2019-2-15 14:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 lvben5d 于 2019-2-18 09:44 编辑

1.    原:void usbd_ep_rx (usb_core_handle_struct *pudev, uint8_t ep_addr, uint8_t *pbuf, uint16_t buf_len)
           {  ......
                   devepxlen &= ~DEPLEN_TLEN;
                   devepxlen &= ~DEPLEN_PCNT;
             }
      可优化为              (KEI5 Level-0 编译等级下 汇编指令缩减4条!)
       void usbd_ep_rx (usb_core_handle_struct *pudev, uint8_t ep_addr, uint8_t *pbuf, uint16_t buf_len)
           {     ......
                   devepxlen &= ~(DEPLEN_TLEN | DEPLEN_PCNT);
             }
2.  static uint32_t usbd_intf_rxfifo (usb_core_handle_struct *pudev)  函数RxFIFO非空中断进行数据采集  由于我的是设备端
    常规处理的为SETUP  OUT数据包
        switch (RSTAT_PCKST(rx_status)) {
case RXSTAT_DATA_UPDT:      //0010:接收到OUT数据包     
        if (bcount > 0U) {
            /* read the fifo data  */
            usb_fifo_read(ep->xfer_buff, (uint16_t)bcount);
            ep->xfer_buff  += bcount;
            ep->xfer_count += bcount;
        }
        break;
        case RXSTAT_SETUP_UPDT:            //0110:接收到SETUP数据包
        data_pid = RSTAT_DPID(rx_status);  //PID只有SETEP校验的时候才回去看下吧?
        if ((0U == endp_num) && (8U == bcount) && (DPID_DATA0 == data_pid)) {
            /* copy the setup packet received in fifo into the setup buffer in ram */
            usb_fifo_read(pudev->dev.setup_packet, 8U);
            ep->xfer_count += bcount;
        }
        break;
        case RXSTAT_GOUT_NAK:          //0001:全局OUT NAK(产生一个中断)
        break;
    case RXSTAT_XFER_COMP:         //0011OUT传输完成(产生一个中断)
        break;
    case RXSTAT_SETUP_COMP:        //0100SETUP传输完成(产生一个中断)
        break;
    default:
        break;
}
沙发
vivilzb1985| | 2019-2-17 13:37 | 只看该作者
这样写的是不是太简洁了?

使用特权

评论回复
板凳
firstblood| | 2019-2-17 22:01 | 只看该作者
这个怎么一个优化法的?单从这几句程序的看不出来啥的

使用特权

评论回复
地板
comeon201208| | 2019-2-17 23:29 | 只看该作者
这个设计的我也没看出来的

使用特权

评论回复
5
angerbird| | 2019-2-18 23:28 | 只看该作者
我来参考下这个优化设计的

使用特权

评论回复
6
smilingangel| | 2019-2-24 22:28 | 只看该作者
后边几个case分支的怎没有啥处理的?

使用特权

评论回复
7
baimiaocun2015| | 2019-2-24 23:22 | 只看该作者
这个怎么处理case语句的?

使用特权

评论回复
8
tongbu2015| | 2019-2-27 23:03 | 只看该作者
最后那三个case分支的没啥意义的吧

使用特权

评论回复
9
chuntian2016| | 2019-2-28 20:39 | 只看该作者
这个我先参考下的

使用特权

评论回复
10
vibra2016| | 2019-2-28 21:55 | 只看该作者
这其实也没有怎么优化的呀

使用特权

评论回复
11
vibra2016| | 2019-2-28 21:56 | 只看该作者
要从程序设计的逻辑上根本进行优化的

使用特权

评论回复
12
wakayi| | 2019-3-3 13:54 | 只看该作者
没看出来哪里不同啊

使用特权

评论回复
13
xiaoqizi| | 2019-3-3 14:23 | 只看该作者
没看出对比性来啊

使用特权

评论回复
14
木木guainv| | 2019-3-3 14:31 | 只看该作者
看不出来哪里优化了啊

使用特权

评论回复
15
lvben5d|  楼主 | 2019-3-3 15:21 | 只看该作者
tongbu2015 发表于 2019-2-27 23:03
最后那三个case分支的没啥意义的吧

官网例程 就是没处理,实际应用中,作为设备端,我个人也觉得没必要处理。等大家用到,熟悉了GD32的这个设计规则,就了解了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

95

主题

746

帖子

12

粉丝