<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          好友讓我看這段代碼

          共 3167字,需瀏覽 7分鐘

           ·

          2022-07-26 16:32

          周末的時(shí)候,一個(gè)微信好友讓我旁邊看一段代碼

          在寫下面的文章之前,我先簡單說下

          寫代碼是一件非常有意思的事情,同時(shí)也是一件需要我們認(rèn)真對待的事情,我不認(rèn)為一定要把代碼寫的和大神一樣看不明白,但是至少要邏輯清晰,不能出現(xiàn)混淆不清的情況發(fā)生。

          最近一年,我也在不斷的提高自己的編程能力,之前的工作,很多是做處理系統(tǒng)和驅(qū)動(dòng)等事情,但是實(shí)際的應(yīng)用編程并沒有很強(qiáng)的功底。也是在不斷學(xué)習(xí)和前進(jìn),也非常感謝朋友和同事們對我的幫助和支持。

          ——

          這段代碼是這樣的

          static unsigned short timer_tick_cnt = 0;


          static ___interrupt USER_TIMER void timer_isr(void)//中斷服務(wù)函數(shù)
          {
              if (TMR->CON & BIT(15)) //定時(shí)器溢出中斷標(biāo)志位
              {
                  TMR->CON |= BIT(14);//清中斷
                  ///putchar('@');
                  //todo,中斷函數(shù)執(zhí)行程序...
                  timer_tick_cnt++;
              }
          }

          static unsigned short timer_tick_get_current_timer(void)
          {
           unsigned short timer_tick_count = timer_tick_cnt;
              return timer_tick_count;
          }

          unsigned short usRecord = 0;

          unsigned char timer_tick_timeout_wait(unsigned short *p_var, unsigned short timeout)
          {
              if( timer_tick_get_current_timer() - *p_var  < timeout )
              {
                  ///usRecord = timer_tick_get_current_timer();
                  ///printf("=======rec=%d,*p_var=%d=====\n",usRecord,*p_var);
                  ///printf("====TIMER return 0====\n");
                  return 0;
              }

              *p_var  = timer_tick_get_current_timer();
              ///usRecord///printf("====TIMER return 1====\n");
              return 1;
          }
          unsigned short testTimer = 0;
          #define TIME_TICK_1MS_1S 1000
          void testHandler(void)
          {
           if(timer_tick_timeout_wait(&testTimer,TIME_TICK_1MS_1S))//1ms的中斷溢出,故1000為1s
           {
            printf("helloworld\n");//問題點(diǎn)是如果timer_tick_timeout_wait的參數(shù)timeout定義為unsigned short,在約65s(65535ms)后該函數(shù)一直返回0而不再返回1,unsigned int正常
           }
          }
          int main(void)
          {
           timerInit();//1ms的定時(shí)器中斷,該函數(shù)不是問題點(diǎn),問題點(diǎn)在下面
           while(1)
           {
            testHandler();
           }
          }

          這個(gè)是原始的代碼,我沒有做任何的修改。

          問題他在代碼里面描述的比較清晰

          //問題點(diǎn)是如果timer_tick_timeout_wait的參數(shù)timeout定義為unsigned short,在約65s(65535ms)后該函數(shù)一直返回0而不再返回1,unsigned int正常

          細(xì)心的人會(huì)發(fā)現(xiàn)一個(gè)問題


          timer_tick_cnt 該死的變量一直遞增

          我之前寫過一篇文章,說是內(nèi)核里面時(shí)間戳的問題,如果保存時(shí)間戳的變量定義有問題,那可能也會(huì)導(dǎo)致時(shí)間有問題。

          這也是他發(fā)現(xiàn)他的代碼有問題的原因。

          ——

          我再說下其他的情況

          他設(shè)計(jì)的這個(gè)系統(tǒng)的初衷是系統(tǒng)定時(shí)器到一個(gè)指定的時(shí)間后去執(zhí)行一個(gè)函數(shù),但是直接把在定時(shí)器里面的變量拿到外面去判斷,這里就不很好。

          定時(shí)器應(yīng)該只完成定時(shí)的事情,至于到了多少時(shí)間,告訴外面的其他任務(wù)就好了,這樣可以做到高內(nèi)聚。

          變量timer_tick_cnt在其他地方操作,后續(xù)有問題排查起來肯定會(huì)很難受。


          ——


          變量的命名、函數(shù)的命名、代碼風(fēng)格


          簡直不堪入目,有的地方用下劃線、有的地方用駝峰。



          還有這個(gè)函數(shù)的執(zhí)行,我有點(diǎn)看不懂



          CPU就是這樣被你累壞的啊。


          關(guān)于變量和函數(shù)命名的網(wǎng)站,我推薦這個(gè),這個(gè)網(wǎng)站非常適合我們


          https://www.chtml.cn



          這不比你自己想好多了。


          ——


          宏的含義不清晰



          這樣給宏命名是非常不好的,先是1MS 又是1S,所以這個(gè)宏到底是啥,如果不看代碼的話是很難理解意思。


          如果是我,我會(huì)表明這個(gè)宏做什么事情,但是后面要加上MS,因?yàn)檫@個(gè)事件是MS的時(shí)間。


          ——


          函數(shù)的命名大家可能也發(fā)現(xiàn)了,有些是駝峰,有些下劃線。


          這不是關(guān)鍵,關(guān)鍵是有些函數(shù)的用意沒有表明清楚,不知道這個(gè)函數(shù)的作用是什么。


          以上是我自己的個(gè)人觀點(diǎn)


          我覺得寫代碼是要對待一個(gè)藝術(shù)品,把這個(gè)東西做得好,做得優(yōu)秀,是一件令我們愉悅的事情。


          大家共勉之!


          瀏覽 44
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  三级三级看三级91 | 无码内射国产 | 大鸡巴在线免费观看视频 | 国产老妈操逼 | 成人毛片女人免费看 |