硬汉嵌入式论坛

 找回密码
 立即注册
查看: 5671|回复: 3
收起左侧

[MDK] 大家可以根据需要对MDK的某些文件单独的做高等级优化

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106997
QQ
发表于 2018-8-20 00:47:01 | 显示全部楼层 |阅读模式
这个功能还是比较实用了,如果工程无法整体做等级优化,可以把一些重要的文件单独做优化。

又或者反过来,整体做高等级优化,不支持的文件设置为低等级即可。


QQ截图20180820004545.png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106997
QQ
 楼主| 发表于 2019-3-2 08:44:36 | 显示全部楼层
对一些函数做优化也是可以的。
  1. #if defined   (__CC_ARM) /*!< ARM Compiler */
  2. #pragma O0
  3. #elif defined (__GNUC__) /*!< GNU Compiler */
  4. #pragma GCC optimize ("O0")
  5. #endif /* __CC_ARM */
  6. HAL_StatusTypeDef USB_HC_StartXfer(USB_OTG_GlobalTypeDef *USBx, USB_OTG_HCTypeDef *hc, uint8_t dma)
  7. {
  8.   uint8_t  is_oddframe = 0;
  9.   uint16_t len_words = 0;   
  10.   uint16_t num_packets = 0;
  11.   uint16_t max_hc_pkt_count = 256;
  12.   uint32_t tmpreg = 0;
  13.    
  14.   if((USBx != USB2_OTG_FS) && (hc->speed == USB_OTG_SPEED_HIGH))
  15.   {
  16.     if((dma == 0) && (hc->do_ping == 1))
  17.     {
  18.       USB_DoPing(USBx, hc->ch_num);
  19.       return HAL_OK;
  20.     }
  21.     else if(dma == 1)
  22.     {
  23.       USBx_HC(hc->ch_num)->HCINTMSK &= ~(USB_OTG_HCINTMSK_NYET | USB_OTG_HCINTMSK_ACKM);
  24.       hc->do_ping = 0;
  25.     }
  26.   }
  27.   
  28.   /* Compute the expected number of packets associated to the transfer */
  29.   if (hc->xfer_len > 0)
  30.   {
  31.     num_packets = (hc->xfer_len + hc->max_packet - 1) / hc->max_packet;
  32.    
  33.     if (num_packets > max_hc_pkt_count)
  34.     {
  35.       num_packets = max_hc_pkt_count;
  36.       hc->xfer_len = num_packets * hc->max_packet;
  37.     }
  38.   }
  39.   else
  40.   {
  41.     num_packets = 1;
  42.   }
  43.   if (hc->ep_is_in)
  44.   {
  45.     hc->xfer_len = num_packets * hc->max_packet;
  46.   }
  47.   
  48.   /* Initialize the HCTSIZn register */
  49.   USBx_HC(hc->ch_num)->HCTSIZ = (((hc->xfer_len) & USB_OTG_HCTSIZ_XFRSIZ)) |\
  50.     ((num_packets << 19) & USB_OTG_HCTSIZ_PKTCNT) |\
  51.       (((hc->data_pid) << 29) & USB_OTG_HCTSIZ_DPID);
  52.   
  53.   if (dma)
  54.   {
  55.     /* xfer_buff MUST be 32-bits aligned */
  56.     USBx_HC(hc->ch_num)->HCDMA = (uint32_t)hc->xfer_buff;
  57.   }
  58.   
  59.   is_oddframe = (USBx_HOST->HFNUM & 0x01) ? 0 : 1;
  60.   USBx_HC(hc->ch_num)->HCCHAR &= ~USB_OTG_HCCHAR_ODDFRM;
  61.   USBx_HC(hc->ch_num)->HCCHAR |= (is_oddframe << 29);
  62.   
  63.   /* Set host channel enable */
  64.   tmpreg = USBx_HC(hc->ch_num)->HCCHAR;
  65.   tmpreg &= ~USB_OTG_HCCHAR_CHDIS;
  66.   tmpreg |= USB_OTG_HCCHAR_CHENA;
  67.   USBx_HC(hc->ch_num)->HCCHAR = tmpreg;
  68.   
  69.   if (dma == 0) /* Slave mode */
  70.   {  
  71.     if((hc->ep_is_in == 0) && (hc->xfer_len > 0))
  72.     {
  73.       switch(hc->ep_type)
  74.       {
  75.         /* Non periodic transfer */
  76.       case EP_TYPE_CTRL:
  77.       case EP_TYPE_BULK:
  78.         
  79.         len_words = (hc->xfer_len + 3) / 4;
  80.         
  81.         /* check if there is enough space in FIFO space */
  82.         if(len_words > (USBx->HNPTXSTS & 0xFFFF))
  83.         {
  84.           /* need to process data in nptxfempty interrupt */
  85.           USBx->GINTMSK |= USB_OTG_GINTMSK_NPTXFEM;
  86.         }
  87.         break;
  88.         /* Periodic transfer */
  89.       case EP_TYPE_INTR:
  90.       case EP_TYPE_ISOC:
  91.         len_words = (hc->xfer_len + 3) / 4;
  92.         /* check if there is enough space in FIFO space */
  93.         if(len_words > (USBx_HOST->HPTXSTS & 0xFFFF)) /* split the transfer */
  94.         {
  95.           /* need to process data in ptxfempty interrupt */
  96.           USBx->GINTMSK |= USB_OTG_GINTMSK_PTXFEM;         
  97.         }
  98.         break;
  99.         
  100.       default:
  101.         break;
  102.       }
  103.       
  104.       /* Write packet into the Tx FIFO. */
  105.       USB_WritePacket(USBx, hc->xfer_buff, hc->ch_num, hc->xfer_len, 0);
  106.     }
  107.   }
  108.   
  109.   return HAL_OK;
  110. }
复制代码


回复

使用道具 举报

0

主题

43

回帖

43

积分

新手上路

积分
43
发表于 2020-11-25 21:19:05 | 显示全部楼层
学习了 啊哈哈
回复

使用道具 举报

1

主题

19

回帖

22

积分

新手上路

积分
22
发表于 2021-4-28 17:09:04 | 显示全部楼层
正好遇到优化后异常的问题,顺藤摸瓜 摸到这
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-13 17:44 , Processed in 0.160475 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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