久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
    分享

    C語(yǔ)言基礎(chǔ):減少for循環(huán),提升執(zhí)行效率

     開(kāi)心果NeedCar 2024-05-12 發(fā)布于上海
    搞汽車(chē)嵌入式開(kāi)發(fā)的小伙伴,似乎對(duì)編程語(yǔ)言要求不高。只要能用,程序能動(dòng),咱們就縫縫補(bǔ)補(bǔ)又三年。雖然是這么說(shuō),但是,作為一名開(kāi)發(fā)者,咱們還是要有上進(jìn)心的。畢竟汽車(chē)級(jí)MCU資源不是那么豐富,能在代碼上做一些優(yōu)化,提升產(chǎn)品性能,也算咱們的feature。本文,聊一聊提升程序效率的一種方式:減少for循環(huán),提升執(zhí)行效率。

    1、for循環(huán)問(wèn)題舉例

    問(wèn)題描述:對(duì)地址范圍0x200000~0x2FFFFF的數(shù)據(jù)進(jìn)行加密計(jì)算,每次只能輸入16 Byte字節(jié)(一個(gè)Block)進(jìn)行計(jì)算,上一次的計(jì)算結(jié)果參與下一次計(jì)算。熟悉CMAC加密的同學(xué)應(yīng)該看出來(lái),這就是一個(gè)典型的CMAC計(jì)算。常規(guī)編碼,我們會(huì)怎么寫(xiě)呢?示意如下:
    for (; CmacData.leftDataLen > 16; ){    AesCmac_Cal128BitLen(addressIn);    addressIn += 16U;    CmacData.leftDataLen -= 16U;}
    如果覺(jué)得別扭,可以改造成如下while格式:
    while (CmacData.leftDataLen > 16){    AesCmac_Cal128BitLen(addressIn);    addressIn += 16U;    CmacData.leftDataLen -= 16U;}
    初始長(zhǎng)度CmacData.leftDataLen = 0x100000,也就是1 MBytes。那么,這樣的寫(xiě)法會(huì)消耗多少時(shí)間呢?本文用Timer(定時(shí)器)統(tǒng)計(jì),用時(shí)統(tǒng)計(jì),示意如下
    TimeArr[0] = OsTimer0_GetTicks();for (; CmacData.leftDataLen > 16; ){    AesCmac_Cal128BitLen(addressIn);    addressIn += 16U;    CmacData.leftDataLen -= 16U;}TimeArr[1] = OsTimer0_GetTicks() - TimeArr[0];
    for寫(xiě)法平均用時(shí)8567044Ticks,while寫(xiě)法平均用時(shí)8569820Ticks。
    其中,Timer主頻60MHz,換算下來(lái),兩者分別用時(shí):142.784ms、142.830ms。否優(yōu)化上述的寫(xiě)法呢?答:可以。

    2、減少for循環(huán),提升效率

    優(yōu)化思路:如上的循環(huán)中,每16 Bytes進(jìn)行一次判斷,而且每次運(yùn)算,均需要進(jìn)行address的累加和長(zhǎng)度的遞減。所以,如果把字節(jié)提高到64 Bytes執(zhí)行一次判斷,可以減少3次address的累加和長(zhǎng)度的遞減,即:適當(dāng)增加判斷的顆粒度。
    修改while代碼如下所示:
    while (CmacData.leftDataLen > 64){    AesCmac_Cal128BitLen(addressIn);    AesCmac_Cal128BitLen(addressIn+16);    AesCmac_Cal128BitLen(addressIn+32);    AesCmac_Cal128BitLen(addressIn+48);    addressIn += 64U;    CmacData.leftDataLen -= 64U;}

    用時(shí):7586131Ticks,即:126.436ms。

    修改for代碼如下所示:

    for (;CmacData.leftDataLen > 64;){    AesCmac_Cal128BitLen(addressIn);    AesCmac_Cal128BitLen(addressIn+16);    AesCmac_Cal128BitLen(addressIn+32);    AesCmac_Cal128BitLen(addressIn+48);    addressIn += 64U;    CmacData.leftDataLen -= 64U;}

    用時(shí):7585583Ticks,即:126.426ms。

    統(tǒng)計(jì)對(duì)比如下:

    所以,遇到for循環(huán)時(shí),可以適當(dāng)放大判斷的顆粒度。

      轉(zhuǎn)藏 分享 獻(xiàn)花(0

      0條評(píng)論

      發(fā)表

      請(qǐng)遵守用戶(hù) 評(píng)論公約

      類(lèi)似文章 更多

      主站蜘蛛池模板: 国产乱子伦农村叉叉叉| 97精品久久久久中文字幕| 精品国产午夜肉伦伦影院| 国产在沙发上午睡被强| 免费AV片在线观看网址| 国产乱妇乱子在线视频| 成人av午夜在线观看| 色综合 图片区 小说区| 中文午夜乱理片无码| 成 人 在 线 免费观看| 久久精品国产亚洲AV忘忧草18 | 中文字幕av无码免费一区| 久久中文字幕AV一区二区不卡| 情侣黄网站免费看| 国产永久免费高清在线观看| 一个人免费视频观看在线WWW | 高清自拍亚洲精品二区| 夜夜躁狠狠躁日日躁| 日韩V欧美V中文在线| 国产色秀视频在线播放| 好吊妞人成视频在线观看| 好爽毛片一区二区三区四| A三级三级成人网站在线视频| 国产成人精品无码播放| 色婷婷久久综合中文久久一本| 国产精品中文字幕日韩| 成人免费看片又大又黄| 狠狠亚洲色一日本高清色| 伊人久久综合无码成人网| 国产第一页浮力影院草草影视| 国产免费一区二区不卡| 被黑人伦流澡到高潮HNP动漫| 国产成年码AV片在线观看| 日韩精品中文字幕有码| 特黄三级又爽又粗又大| 国产AV老师黑色丝袜美腿| 一本av高清一区二区三区| A级国产乱理伦片在线播放| 成人免费AA片在线观看| 日韩国产精品无码一区二区三区| 国产精品久久久久影院|