1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        好友讓我看這段代碼

        共 3167字,需瀏覽 7分鐘

         ·

        2022-07-26 16:32

        周末的時候,一個微信好友讓我旁邊看一段代碼

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

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

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

        ——

        這段代碼是這樣的

        static unsigned short timer_tick_cnt = 0;


        static ___interrupt USER_TIMER void timer_isr(void)//中斷服務(wù)函數(shù)
        {
            if (TMR->CON & BIT(15)) //定時器溢出中斷標(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");//問題點是如果timer_tick_timeout_wait的參數(shù)timeout定義為unsigned short,在約65s(65535ms)后該函數(shù)一直返回0而不再返回1,unsigned int正常
         }
        }
        int main(void)
        {
         timerInit();//1ms的定時器中斷,該函數(shù)不是問題點,問題點在下面
         while(1)
         {
          testHandler();
         }
        }

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

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

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

        細心的人會發(fā)現(xiàn)一個問題


        timer_tick_cnt 該死的變量一直遞增

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

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

        ——

        我再說下其他的情況

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

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

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


        ——


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


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



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



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


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


        https://www.chtml.cn



        這不比你自己想好多了。


        ——


        宏的含義不清晰



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


        如果是我,我會表明這個宏做什么事情,但是后面要加上MS,因為這個事件是MS的時間。


        ——


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


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


        以上是我自己的個人觀點


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


        大家共勉之!


        瀏覽 44
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            麻豆成人影院 | 国产三级全黄 | 精品少妇一区二区三区在线观看 | 欧美字幕一区 | 97久久超碰国产精品2021 | 性爱无码高清视频 | 欧美性大战 | 福利在线国产 | 亚洲无码婷婷 | 欧美 日韩 高清 |