欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 5120|回復(fù): 36
打印 上一主題 下一主題
收起左側(cè)

非阻塞程序設(shè)計(jì)代表了一個(gè)工程師的水平

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1101997 發(fā)表于 2023-12-12 09:21 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
最近比較崩潰的項(xiàng)目移植,一個(gè)是RC522驅(qū)動(dòng),網(wǎng)絡(luò)上的代碼都是需要死等,很多實(shí)例都是一樣,還有項(xiàng)目中需要使用CH376S,官方的DEMO也是一樣,死等待,仿佛整個(gè)系統(tǒng)只做一件事一樣

大家有沒(méi)有什么非阻塞設(shè)計(jì)的經(jīng)驗(yàn)分享一下,我自己常用的就是狀態(tài)機(jī)和OS系統(tǒng)兩種方法,但搶占式OS用在8位單片機(jī)系統(tǒng)總是捉襟見(jiàn)肘,非搶占式有時(shí)任務(wù)調(diào)度不夠靈活。
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:1101997 發(fā)表于 2023-12-12 12:45 | 只看該作者
目前51主要使用的還是keil-tniy,應(yīng)用簡(jiǎn)單缺點(diǎn)是缺少了搶占機(jī)制。
回復(fù)

使用道具 舉報(bào)

板凳
ID:401564 發(fā)表于 2023-12-12 22:19 | 只看該作者
死等不代表水平,有時(shí)候效率并沒(méi)有多大意義,你知道怎么提高代碼運(yùn)行效率的原理就可以,但并不代表每個(gè)程序都要單片機(jī)代碼達(dá)到最高的效率
RC522尋卡,讀寫(xiě)的死等并不會(huì)用太多的時(shí)間,而且,在實(shí)際應(yīng)用中,無(wú)非就是把卡片放上去感應(yīng)一下,然后拿開(kāi),這中間有太多的時(shí)間來(lái)死等了,除非你動(dòng)作比閃電俠還快
其它需要大數(shù)據(jù)處理的函數(shù),應(yīng)該才是你要處理的東西,比如大文件的讀寫(xiě),大量浮點(diǎn)數(shù)據(jù)的處理,那應(yīng)該是在尋卡之后的處理
假設(shè)是一個(gè)打卡程序,我一打卡之后,應(yīng)該是先把我的工號(hào),上班時(shí)間之類(lèi)的先緩存,我走了之后,到下一個(gè)打卡人到來(lái)之前處理的
回復(fù)

使用道具 舉報(bào)

地板
ID:883242 發(fā)表于 2023-12-13 02:54 | 只看該作者
8位機(jī)上RTOS顯然不是什么好的選擇,那就用個(gè)定時(shí)中斷,所有的任務(wù)調(diào)度放在這個(gè)中斷里面就行了唄。
回復(fù)

使用道具 舉報(bào)

5#
ID:384109 發(fā)表于 2023-12-13 08:28 | 只看該作者
不懂得死等的意義,只代表你沒(méi)做過(guò)多少項(xiàng)目,同時(shí)也代表你只追求所謂的效率這種表面的東西來(lái)體現(xiàn)自己
回復(fù)

使用道具 舉報(bào)

6#
ID:1101997 發(fā)表于 2023-12-13 09:37 | 只看該作者
Y_G_G 發(fā)表于 2023-12-12 22:19
死等不代表水平,有時(shí)候效率并沒(méi)有多大意義,你知道怎么提高代碼運(yùn)行效率的原理就可以,但并不代表每個(gè)程序都 ...

我后臺(tái)需要處理并響應(yīng)四路通訊任務(wù)有主有從,大量的主業(yè)務(wù)流程,死等肯定完蛋了
回復(fù)

使用道具 舉報(bào)

7#
ID:1101997 發(fā)表于 2023-12-13 09:39 | 只看該作者
人中狼 發(fā)表于 2023-12-13 08:28
不懂得死等的意義,只代表你沒(méi)做過(guò)多少項(xiàng)目,同時(shí)也代表你只追求所謂的效率這種表面的東西來(lái)體現(xiàn)自己

確實(shí)不多,做個(gè)萬(wàn)行以上代碼的項(xiàng)目估計(jì)也就20-30個(gè)吧
回復(fù)

使用道具 舉報(bào)

8#
ID:1101997 發(fā)表于 2023-12-13 09:43 | 只看該作者
Hephaestus 發(fā)表于 2023-12-13 02:54
8位機(jī)上RTOS顯然不是什么好的選擇,那就用個(gè)定時(shí)中斷,所有的任務(wù)調(diào)度放在這個(gè)中斷里面就行了唄。

是的,這是一個(gè)簡(jiǎn)單的辦法,缺點(diǎn)是需要警惕函數(shù)再入帶來(lái)的問(wèn)題,當(dāng)然程序結(jié)構(gòu)簡(jiǎn)單就容易多了,大不了相同的函數(shù)重新復(fù)制一份
回復(fù)

使用道具 舉報(bào)

9#
ID:1101997 發(fā)表于 2023-12-13 10:10 | 只看該作者
通常非阻塞函數(shù)原型我自己一般都是這么寫(xiě):

U8 StatFun(,,,,);
把完成狀態(tài)放在程序返回上,程序調(diào)用的時(shí)候直接看返回碼就可以了,返回可以有(完成,進(jìn)行中,錯(cuò)誤)等狀態(tài),而真正需要處理包括需要返回的變量通過(guò)形參指針形式來(lái)輸入輸出。
回復(fù)

使用道具 舉報(bào)

10#
ID:108361 發(fā)表于 2023-12-13 10:43 | 只看該作者
可以考慮在8位機(jī)用協(xié)程的實(shí)現(xiàn)機(jī)制來(lái)完成非阻塞式程序設(shè)計(jì)
回復(fù)

使用道具 舉報(bào)

11#
ID:458247 發(fā)表于 2023-12-13 10:44 | 只看該作者
nearsea 發(fā)表于 2023-12-13 09:39
確實(shí)不多,做個(gè)萬(wàn)行以上代碼的項(xiàng)目估計(jì)也就20-30個(gè)吧

死等確實(shí)不是個(gè)好辦法。特別是做汽車(chē)行業(yè)的,死等就等著被投訴吧。我們連幾微秒的延時(shí)都不能用,我們調(diào)度周期不高,5ms,所有工作必須在5ms內(nèi)完成,不能完成的就拆分,每5ms運(yùn)行一部分。實(shí)際上占用了6/70%的cpu時(shí)間。
回復(fù)

使用道具 舉報(bào)

12#
ID:958310 發(fā)表于 2023-12-13 10:48 | 只看該作者
《UML狀態(tài)圖的實(shí)用C/C++設(shè)計(jì)(QP狀態(tài)機(jī))》
回復(fù)

使用道具 舉報(bào)

13#
ID:332444 發(fā)表于 2023-12-13 10:55 | 只看該作者
家里有一臺(tái)旭日黃熱水器控制器每天都走時(shí)差十幾分鐘,客服給個(gè)電話(huà)咨詢(xún),回答還沾沾自喜的說(shuō)只要每月調(diào)整即可,無(wú)語(yǔ)以對(duì)!
回復(fù)

使用道具 舉報(bào)

14#
ID:397054 發(fā)表于 2023-12-13 11:12 | 只看該作者
這種立論屬于不著邊際類(lèi),毫無(wú)意義。。。。。
回復(fù)

使用道具 舉報(bào)

15#
ID:879348 發(fā)表于 2023-12-13 11:24 | 只看該作者
沒(méi)必要花這心思,產(chǎn)品關(guān)鍵是穩(wěn)定
回復(fù)

使用道具 舉報(bào)

16#
ID:336378 發(fā)表于 2023-12-13 11:35 | 只看該作者
大俠級(jí)人物啊,都上萬(wàn)行代碼,一般單片機(jī)估計(jì)上個(gè)幾千行就可以了吧。
回復(fù)

使用道具 舉報(bào)

17#
ID:401564 發(fā)表于 2023-12-13 12:36 | 只看該作者
nearsea 發(fā)表于 2023-12-13 09:37
我后臺(tái)需要處理并響應(yīng)四路通訊任務(wù)有主有從,大量的主業(yè)務(wù)流程,死等肯定完蛋了

不過(guò)就是個(gè)處理的順序而已
RC522從尋卡到讀寫(xiě)完成,不需要多少時(shí)間的,你把卡上的數(shù)據(jù)存放到緩沖里,隨便怎么通訊
這并不是什么太高深的東西
回復(fù)

使用道具 舉報(bào)

18#
ID:1101997 發(fā)表于 2023-12-13 14:39 | 只看該作者
Y_G_G 發(fā)表于 2023-12-13 12:36
不過(guò)就是個(gè)處理的順序而已
RC522從尋卡到讀寫(xiě)完成,不需要多少時(shí)間的,你把卡上的數(shù)據(jù)存放到緩沖里,隨便怎 ...

好吧,以后跟你好好學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

19#
ID:1101997 發(fā)表于 2023-12-13 14:52 | 只看該作者
bigbigcong 發(fā)表于 2023-12-13 10:48
《UML狀態(tài)圖的實(shí)用C/C++設(shè)計(jì)(QP狀態(tài)機(jī))》

挺復(fù)雜的,想看看但明顯是系統(tǒng)性的,沒(méi)有那么多時(shí)間去深入學(xué)習(xí)。

謝謝你的推薦
回復(fù)

使用道具 舉報(bào)

20#
ID:883242 發(fā)表于 2023-12-13 15:09 | 只看該作者
又開(kāi)始吹牛了,8位單片機(jī)怎么可能裝得下1萬(wàn)行c代碼?
回復(fù)

使用道具 舉報(bào)

21#
ID:1101997 發(fā)表于 2023-12-13 15:27 | 只看該作者
Hephaestus 發(fā)表于 2023-12-13 15:09
又開(kāi)始吹牛了,8位單片機(jī)怎么可能裝得下1萬(wàn)行c代碼?

萬(wàn)行很多嗎?

記得很久很久以前,幫南京一家做消防的公司做中控盤(pán),那個(gè)時(shí)候也只有51可以選擇,代碼長(zhǎng)度是5萬(wàn)行+,樓主可能不知道有個(gè)Bank擴(kuò)展的事,編譯器還不是今天的KEIL,好像是什么阿基米德命令行的,在DOS環(huán)境下運(yùn)行,不知道和今天的IAR是不是有淵源,估計(jì)存檔文件里面還能找到這玩意兒。
回復(fù)

使用道具 舉報(bào)

22#
ID:883242 發(fā)表于 2023-12-13 15:55 | 只看該作者
nearsea 發(fā)表于 2023-12-13 15:27
萬(wàn)行很多嗎?

記得很久很久以前,幫南京一家做消防的公司做中控盤(pán),那個(gè)時(shí)候也只有51可以選擇,代碼長(zhǎng) ...

AD2500唄,我電腦里面還有。

就算是5萬(wàn)+行匯編,一行對(duì)應(yīng)2字節(jié)算,就有100kbyte,8051根本就放不下。

c語(yǔ)言比匯編大10倍,一行平均能翻譯出20個(gè)字節(jié),1Mbyte是個(gè)概念你有嗎???

8位機(jī)尋址能力只有64k,你知道是什么意思嗎?
回復(fù)

使用道具 舉報(bào)

23#
ID:1101997 發(fā)表于 2023-12-13 16:32 | 只看該作者
你贏了,這是前幾天給用戶(hù)做的一個(gè)商業(yè)項(xiàng)目的一個(gè)文件,100多行代碼編譯生成了300個(gè)字節(jié)的二進(jìn)制文件,不爭(zhēng)論,對(duì)不起你,誤導(dǎo)了你。

C51 COMPILER V9.60.7.0   UART1                                                             11/22/2023 13:28:21 PAGE 1   


C51 COMPILER V9.60.7.0, COMPILATION OF MODULE UART1
OBJECT MODULE PLACED IN .\OBJ\UART1.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE SRC\UART1.C LARGE OMF2 OPTIMIZE(7,SPEED) BROWSE DEBUG CODE PRINT(.\LST\UART
                    -1.lst) TABS(2) OBJECT(.\OBJ\UART1.obj)

line level    source

   1          #define __UART1_C_
   2          /*
   3          串口1 的波特率是可變的,其波特率可由定時(shí)器1 或者定時(shí)器2 產(chǎn)生。
   4          當(dāng)定時(shí)器采用1T 模式時(shí)(12倍速),相應(yīng)的波特率的速度也會(huì)相應(yīng)提高12 倍。
   5          */
   6         
   7          #include "CONFIG.H"
   8         
   9          #define DEBUG_PRT
  10         
  11          //串口1用于程序調(diào)試信息輸出
  12          void SetUart1(void) {
  13   1      
  14   1      #ifdef DEBUG_PRT
  15   1        //串口1工作在8位數(shù)據(jù)模式1,允許接收數(shù)據(jù)
  16   1        SCON |= B0101_0000;  
  17   1        //使用定時(shí)器2作為波特率發(fā)生器
  18   1        AUXR |= B0000_0001;
  19   1        //中斷為次低優(yōu)先級(jí)
  20   1        IP   |= B0001_0000;
  21   1        IPH  &= B1110_1111;
  22   1        //允許中斷
  23   1        IE   |= B0001_0000;
  24   1      #else
              #endif  
  26   1      }
  27         
  28          #ifdef DEBUG_PRT
  29          //串口1用于輸出調(diào)試信息
  30          #define cbhUart1_BufSize  250
  31          char vrgbhUart1_Buf[cbhUart1_BufSize];
  32          U8 data vbhEmptyUart1 =0;
  33          U8 data vbhGetUart1  = 0;
  34          BOOL vfUart1_BufSize_Empty = TRUE;
  35         
  36          char vrgbhUart1R_Buf[cbhUart1_BufSize];
  37          U8 data vbhEmptyUart1R =0;
  38          U8 data vbhGetUart1R  = 0;
  39          BOOL vfUart1R_BufSize_Full = FAIL;
  40         
  41          //將串口接收數(shù)據(jù)保存到緩存區(qū)
  42          void ReceUart1R_Buf(U8 bhRece) {
  43   1      U8 data bhTemp;
  44   1      
  45   1        bhTemp=vbhEmptyUart1R+1;
  46   1        if(bhTemp>=cbhUart1_BufSize)
  47   1          bhTemp=0;
  48   1        if(bhTemp!=vbhGetUart1R) {
  49   2          vrgbhUart1R_Buf[vbhEmptyUart1R]=bhRece;
  50   2          vbhEmptyUart1R=bhTemp;
  51   2        }
  52   1        else
  53   1          vfUart1R_BufSize_Full = TRUE;  
  54   1      }  
C51 COMPILER V9.60.7.0   UART1                                                             11/22/2023 13:28:21 PAGE 2   

  55         
  56          //從接收緩沖區(qū)取一個(gè)字節(jié)數(shù)據(jù)
  57          BOOL GetUart1R_Buf(U8 *pbh) {
  58   1      U8 data bhTemp;
  59   1      BOOL fGetOk = FAIL;
  60   1      
  61   1        if(vbhEmptyUart1R!=vbhGetUart1R) {
  62   2          (*pbh)=vrgbhUart1R_Buf[vbhGetUart1R];
  63   2          bhTemp=vbhGetUart1R+1U;
  64   2          if(bhTemp>=cbhUart1_BufSize)
  65   2            bhTemp=0;
  66   2          vbhGetUart1R=bhTemp;
  67   2          vfUart1R_BufSize_Full = FAIL;
  68   2          fGetOk = TRUE;
  69   2        }
  70   1        return(fGetOk);
  71   1      }  
  72         
  73          //從緩沖區(qū)取數(shù)據(jù)發(fā)送到串口
  74          void SendUart1Buf(void) {
  75   1      U8 data bhTemp;
  76   1      
  77   1        if(vbhEmptyUart1!=vbhGetUart1) {
  78   2          SBUF=vrgbhUart1_Buf[vbhGetUart1];
  79   2          bhTemp=vbhGetUart1+1U;
  80   2          if(bhTemp>=cbhUart1_BufSize)
  81   2            bhTemp=0;
  82   2          vbhGetUart1=bhTemp;
  83   2        }
  84   1        else
  85   1          vfUart1_BufSize_Empty = TRUE;
  86   1      }
  87         
  88          //保存數(shù)據(jù)到發(fā)送緩沖區(qū)
  89          char putchar(char bhchar) {
  90   1      U8 data bhTemp;
  91   1      char data bhRet = '\0';  
  92   1      
  93   1        bhTemp=vbhEmptyUart1+1;
  94   1        if(bhTemp>=cbhUart1_BufSize)
  95   1          bhTemp=0;
  96   1        if(bhTemp!=vbhGetUart1) {
  97   2          vrgbhUart1_Buf[vbhEmptyUart1]=bhchar;
  98   2          bhRet=bhchar;
  99   2          vbhEmptyUart1=bhTemp;
100   2          if(vfUart1_BufSize_Empty) {
101   3            vfUart1_BufSize_Empty = FAIL;
102   3            TI = 1;
103   3          }
104   2        }
105   1        return(bhRet);
106   1      }  
107          #endif  
108         
109         
110          void DebugPrt(char *fmt, ...) {
111   1        
112   1        va_list arg_ptr;
113   1        va_start (arg_ptr, fmt);
114   1      #ifdef DEBUG_PRT
115   1        vprintf (fmt, arg_ptr);
116   1      #endif  
C51 COMPILER V9.60.7.0   UART1                                                             11/22/2023 13:28:21 PAGE 3   

117   1        va_end (arg_ptr);
118   1      }
119         
120          #ifdef DEBUG_PRT
121          //串口1用于調(diào)試信息輸出
122          void Uart1(void) interrupt 4 {
123   1        
124   1        if(RI) {
125   2          RI=0;
126   2          ReceUart1R_Buf(SBUF);
127   2        }
128   1        if(TI) {
129   2          TI=0;
130   2          SendUart1Buf();
131   2        }   
132   1      }
133          #endif  
C51 COMPILER V9.60.7.0   UART1                                                             11/22/2023 13:28:21 PAGE 4   

ASSEMBLY LISTING OF GENERATED OBJECT CODE


             ; FUNCTION SetUart1 (BEGIN)
                                           ; SOURCE LINE # 12
                                           ; SOURCE LINE # 16
0000 439850            ORL     SCON,#050H
                                           ; SOURCE LINE # 18
0003 438E01            ORL     AUXR,#01H
                                           ; SOURCE LINE # 20
0006 43B810            ORL     IP,#010H
                                           ; SOURCE LINE # 21
0009 53B7EF            ANL     IPH,#0EFH
                                           ; SOURCE LINE # 23
000C 43A810            ORL     IE,#010H
                                           ; SOURCE LINE # 26
000F 22                RET     
             ; FUNCTION SetUart1 (END)

             ; FUNCTION _ReceUart1R_Buf (BEGIN)
                                           ; SOURCE LINE # 42
;---- Variable 'bhRece' assigned to Register 'R7' ----
                                           ; SOURCE LINE # 45
0000 E500        R     MOV     A,vbhEmptyUart1R
0002 04                INC     A
0003 F500        R     MOV     bhTemp,A
                                           ; SOURCE LINE # 46
0005 C3                CLR     C
0006 94FA              SUBB    A,#0FAH
0008 4003              JC      ?C0002
                                           ; SOURCE LINE # 47
000A E4                CLR     A
000B F500        R     MOV     bhTemp,A
000D         ?C0002:
                                           ; SOURCE LINE # 48
000D E500        R     MOV     A,bhTemp
000F 6500        R     XRL     A,vbhGetUart1R
0011 6011              JZ      ?C0003
                                           ; SOURCE LINE # 49
0013 7400        R     MOV     A,#LOW vrgbhUart1R_Buf
0015 2500        R     ADD     A,vbhEmptyUart1R
0017 F582              MOV     DPL,A
0019 E4                CLR     A
001A 3400        R     ADDC    A,#HIGH vrgbhUart1R_Buf
001C F583              MOV     DPH,A
001E EF                MOV     A,R7
001F F0                MOVX    @DPTR,A
                                           ; SOURCE LINE # 50
0020 850000      R     MOV     vbhEmptyUart1R,bhTemp
                                           ; SOURCE LINE # 51
0023 22                RET     
0024         ?C0003:
                                           ; SOURCE LINE # 53
0024 D200        R     SETB    vfUart1R_BufSize_Full
                                           ; SOURCE LINE # 54
0026         ?C0005:
0026 22                RET     
             ; FUNCTION _ReceUart1R_Buf (END)

             ; FUNCTION _GetUart1R_Buf (BEGIN)
                                           ; SOURCE LINE # 57
;---- Variable 'pbh' assigned to Register 'R1/R2/R3' ----
C51 COMPILER V9.60.7.0   UART1                                                             11/22/2023 13:28:21 PAGE 5   

                                           ; SOURCE LINE # 59
0000 C200        R     CLR     fGetOk
                                           ; SOURCE LINE # 61
0002 E500        R     MOV     A,vbhEmptyUart1R
0004 6500        R     XRL     A,vbhGetUart1R
0006 6023              JZ      ?C0006
                                           ; SOURCE LINE # 62
0008 7400        R     MOV     A,#LOW vrgbhUart1R_Buf
000A 2500        R     ADD     A,vbhGetUart1R
000C F582              MOV     DPL,A
000E E4                CLR     A
000F 3400        R     ADDC    A,#HIGH vrgbhUart1R_Buf
0011 F583              MOV     DPH,A
0013 E0                MOVX    A,@DPTR
0014 120000      E     LCALL   ?C?CSTPTR
                                           ; SOURCE LINE # 63
0017 E500        R     MOV     A,vbhGetUart1R
0019 04                INC     A
001A F500        R     MOV     bhTemp,A
                                           ; SOURCE LINE # 64
001C C3                CLR     C
001D 94FA              SUBB    A,#0FAH
001F 4003              JC      ?C0007
                                           ; SOURCE LINE # 65
0021 E4                CLR     A
0022 F500        R     MOV     bhTemp,A
0024         ?C0007:
                                           ; SOURCE LINE # 66
0024 850000      R     MOV     vbhGetUart1R,bhTemp
                                           ; SOURCE LINE # 67
0027 C200        R     CLR     vfUart1R_BufSize_Full
                                           ; SOURCE LINE # 68
0029 D200        R     SETB    fGetOk
                                           ; SOURCE LINE # 69
002B         ?C0006:
                                           ; SOURCE LINE # 70
002B A200        R     MOV     C,fGetOk
                                           ; SOURCE LINE # 71
002D 22                RET     
             ; FUNCTION _GetUart1R_Buf (END)

             ; FUNCTION SendUart1Buf (BEGIN)
                                           ; SOURCE LINE # 74
                                           ; SOURCE LINE # 77
0000 E500        R     MOV     A,vbhEmptyUart1
0002 6500        R     XRL     A,vbhGetUart1
0004 601F              JZ      ?C0009
                                           ; SOURCE LINE # 78
0006 7400        R     MOV     A,#LOW vrgbhUart1_Buf
0008 2500        R     ADD     A,vbhGetUart1
000A F582              MOV     DPL,A
000C E4                CLR     A
000D 3400        R     ADDC    A,#HIGH vrgbhUart1_Buf
000F F583              MOV     DPH,A
0011 E0                MOVX    A,@DPTR
0012 F599              MOV     SBUF,A
                                           ; SOURCE LINE # 79
0014 E500        R     MOV     A,vbhGetUart1
0016 04                INC     A
0017 F500        R     MOV     bhTemp,A
                                           ; SOURCE LINE # 80
0019 C3                CLR     C
C51 COMPILER V9.60.7.0   UART1                                                             11/22/2023 13:28:21 PAGE 6   

001A 94FA              SUBB    A,#0FAH
001C 4003              JC      ?C0010
                                           ; SOURCE LINE # 81
001E E4                CLR     A
001F F500        R     MOV     bhTemp,A
0021         ?C0010:
                                           ; SOURCE LINE # 82
0021 850000      R     MOV     vbhGetUart1,bhTemp
                                           ; SOURCE LINE # 83
0024 22                RET     
0025         ?C0009:
                                           ; SOURCE LINE # 85
0025 D200        R     SETB    vfUart1_BufSize_Empty
                                           ; SOURCE LINE # 86
0027         ?C0012:
0027 22                RET     
             ; FUNCTION SendUart1Buf (END)

             ; FUNCTION _putchar (BEGIN)
                                           ; SOURCE LINE # 89
;---- Variable 'bhchar' assigned to Register 'R7' ----
                                           ; SOURCE LINE # 91
0000 E4                CLR     A
0001 F500        R     MOV     bhRet,A
                                           ; SOURCE LINE # 93
0003 E500        R     MOV     A,vbhEmptyUart1
0005 04                INC     A
0006 F500        R     MOV     bhTemp,A
                                           ; SOURCE LINE # 94
0008 C3                CLR     C
0009 94FA              SUBB    A,#0FAH
000B 4003              JC      ?C0013
                                           ; SOURCE LINE # 95
000D E4                CLR     A
000E F500        R     MOV     bhTemp,A
0010         ?C0013:
                                           ; SOURCE LINE # 96
0010 E500        R     MOV     A,bhTemp
0012 6500        R     XRL     A,vbhGetUart1
0014 6019              JZ      ?C0014
                                           ; SOURCE LINE # 97
0016 7400        R     MOV     A,#LOW vrgbhUart1_Buf
0018 2500        R     ADD     A,vbhEmptyUart1
001A F582              MOV     DPL,A
001C E4                CLR     A
001D 3400        R     ADDC    A,#HIGH vrgbhUart1_Buf
001F F583              MOV     DPH,A
0021 EF                MOV     A,R7
0022 F0                MOVX    @DPTR,A
                                           ; SOURCE LINE # 98
0023 F500        R     MOV     bhRet,A
                                           ; SOURCE LINE # 99
0025 850000      R     MOV     vbhEmptyUart1,bhTemp
                                           ; SOURCE LINE # 100
0028 300004            JNB     vfUart1_BufSize_Empty,?C0014
                                           ; SOURCE LINE # 101
002B C200        R     CLR     vfUart1_BufSize_Empty
                                           ; SOURCE LINE # 102
002D D299              SETB    TI
                                           ; SOURCE LINE # 103
                                           ; SOURCE LINE # 104
002F         ?C0014:
C51 COMPILER V9.60.7.0   UART1                                                             11/22/2023 13:28:21 PAGE 7   

                                           ; SOURCE LINE # 105
002F AF00        R     MOV     R7,bhRet
                                           ; SOURCE LINE # 106
0031 22                RET     
             ; FUNCTION _putchar (END)

             ; FUNCTION _DebugPrt (BEGIN)
                                           ; SOURCE LINE # 110
0000 900000      R     MOV     DPTR,#fmt
0003 EB                MOV     A,R3
0004 F0                MOVX    @DPTR,A
0005 A3                INC     DPTR
0006 EA                MOV     A,R2
0007 F0                MOVX    @DPTR,A
0008 A3                INC     DPTR
0009 E9                MOV     A,R1
000A F0                MOVX    @DPTR,A
                                           ; SOURCE LINE # 113
000B 900000      R     MOV     DPTR,#arg_ptr
000E 7401              MOV     A,#01H
0010 F0                MOVX    @DPTR,A
0011 A3                INC     DPTR
0012 7400        R     MOV     A,#HIGH fmt+03H
0014 F0                MOVX    @DPTR,A
0015 A3                INC     DPTR
0016 7400        R     MOV     A,#LOW fmt+03H
0018 F0                MOVX    @DPTR,A
                                           ; SOURCE LINE # 115
0019 900000      R     MOV     DPTR,#arg_ptr
001C E0                MOVX    A,@DPTR
001D F9                MOV     R1,A
001E A3                INC     DPTR
001F E0                MOVX    A,@DPTR
0020 FA                MOV     R2,A
0021 A3                INC     DPTR
0022 E0                MOVX    A,@DPTR
0023 900000      E     MOV     DPTR,#?_vprintf?BYTE+03H
0026 C9                XCH     A,R1
0027 F0                MOVX    @DPTR,A
0028 A3                INC     DPTR
0029 EA                MOV     A,R2
002A F0                MOVX    @DPTR,A
002B A3                INC     DPTR
002C E9                MOV     A,R1
002D F0                MOVX    @DPTR,A
002E 900000      R     MOV     DPTR,#fmt
0031 E0                MOVX    A,@DPTR
0032 FB                MOV     R3,A
0033 A3                INC     DPTR
0034 E0                MOVX    A,@DPTR
0035 FA                MOV     R2,A
0036 A3                INC     DPTR
0037 E0                MOVX    A,@DPTR
0038 F9                MOV     R1,A
0039 120000      E     LCALL   _vprintf
                                           ; SOURCE LINE # 117
003C 900000      R     MOV     DPTR,#arg_ptr
003F E4                CLR     A
0040 F0                MOVX    @DPTR,A
0041 A3                INC     DPTR
0042 F0                MOVX    @DPTR,A
0043 A3                INC     DPTR
C51 COMPILER V9.60.7.0   UART1                                                             11/22/2023 13:28:21 PAGE 8   

0044 F0                MOVX    @DPTR,A
                                           ; SOURCE LINE # 118
0045 22                RET     
             ; FUNCTION _DebugPrt (END)

             ; FUNCTION Uart1 (BEGIN)
0000 C0E0              PUSH    ACC
0002 C083              PUSH    DPH
0004 C082              PUSH    DPL
0006 C0D0              PUSH    PSW
0008 75D000            MOV     PSW,#00H
000B C007              PUSH    AR7
                                           ; SOURCE LINE # 122
                                           ; SOURCE LINE # 124
000D 309807            JNB     RI,?C0018
                                           ; SOURCE LINE # 125
0010 C298              CLR     RI
                                           ; SOURCE LINE # 126
0012 AF99              MOV     R7,SBUF
0014 120000      R     LCALL   _ReceUart1R_Buf
                                           ; SOURCE LINE # 127
0017         ?C0018:
                                           ; SOURCE LINE # 128
0017 309905            JNB     TI,?C0020
                                           ; SOURCE LINE # 129
001A C299              CLR     TI
                                           ; SOURCE LINE # 130
001C 120000      R     LCALL   SendUart1Buf
                                           ; SOURCE LINE # 131
                                           ; SOURCE LINE # 132
001F         ?C0020:
001F D007              POP     AR7
0021 D0D0              POP     PSW
0023 D082              POP     DPL
0025 D083              POP     DPH
0027 D0E0              POP     ACC
0029 32                RETI   
             ; FUNCTION Uart1 (END)



MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    306    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =    500      46
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      4       5
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      2       1
   EDATA SIZE       =   ----    ----
   HDATA SIZE       =   ----    ----
   XDATA CONST SIZE =   ----    ----
   FAR CONST SIZE   =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)
回復(fù)

使用道具 舉報(bào)

24#
ID:1101997 發(fā)表于 2023-12-13 16:44 | 只看該作者
上個(gè)回帖審核的慢,后面的比前面的出來(lái)的早。
優(yōu)化等級(jí)還是沒(méi)針對(duì)代碼長(zhǎng)度,并且只有7級(jí)優(yōu)化,代碼和內(nèi)存都使用的是大模式,小內(nèi)存模式應(yīng)該會(huì)更小一些的代碼。
回復(fù)

使用道具 舉報(bào)

25#
ID:1101997 發(fā)表于 2023-12-13 17:38 | 只看該作者
xianfajushi 發(fā)表于 2023-12-13 10:55
家里有一臺(tái)旭日黃熱水器控制器每天都走時(shí)差十幾分鐘,客服給個(gè)電話(huà)咨詢(xún),回答還沾沾自喜的說(shuō)只要每月調(diào)整即 ...

這才是高手,前十幾年一直做消防產(chǎn)品,最近改行做醫(yī)療器械設(shè)計(jì),所有的產(chǎn)品都需要過(guò)強(qiáng)制認(rèn)證。

要是都像那樣,估計(jì)就該吃免費(fèi)飯了
回復(fù)

使用道具 舉報(bào)

26#
ID:332444 發(fā)表于 2023-12-13 18:48 | 只看該作者
我想起了以前有采集市電頻率做時(shí)鐘的了每天誤差也不會(huì)是十幾分鐘
回復(fù)

使用道具 舉報(bào)

27#
ID:485350 發(fā)表于 2023-12-14 09:12 | 只看該作者
xianfajushi 發(fā)表于 2023-12-13 18:48
我想起了以前有采集市電頻率做時(shí)鐘的了每天誤差也不會(huì)是十幾分鐘

電網(wǎng)頻率來(lái)做時(shí)鐘很準(zhǔn)的,一天都差不了2秒
回復(fù)

使用道具 舉報(bào)

28#
ID:1094811 發(fā)表于 2023-12-14 11:07 來(lái)自觸屏版 | 只看該作者
可以用輪詢(xún),調(diào)用一個(gè)定時(shí)器,每隔一段時(shí)間去查詢(xún)狀態(tài)
回復(fù)

使用道具 舉報(bào)

29#
ID:883242 發(fā)表于 2023-12-14 12:16 | 只看該作者
xianfajushi 發(fā)表于 2023-12-13 18:48
我想起了以前有采集市電頻率做時(shí)鐘的了每天誤差也不會(huì)是十幾分鐘

看情況,我家在82年有了個(gè)用50Hz做時(shí)基的鐘控收音機(jī),一開(kāi)始非常準(zhǔn),原子鐘級(jí)別的,跟收音機(jī)報(bào)時(shí)一秒都不帶差的,到八十年代后期越來(lái)越慢,可以一天慢20分鐘,搬家時(shí)扔掉了。
回復(fù)

使用道具 舉報(bào)

30#
ID:1101997 發(fā)表于 2023-12-17 07:42 | 只看該作者
昨天和客戶(hù)一起在無(wú)錫做完和產(chǎn)品的電磁兼容認(rèn)證,因?yàn)槊β抵皇谴掖沂謾C(jī)上看了一眼回帖,記憶中好像有人提出大程序應(yīng)該怎么寫(xiě)的問(wèn)題。

我自己大學(xué)的時(shí)候?qū)W的是無(wú)線(xiàn)電,其實(shí)和軟件沒(méi)啥關(guān)系,后來(lái)因?yàn)榕d趣愛(ài)好系統(tǒng)的學(xué)習(xí)了軟件工程和數(shù)據(jù)結(jié)構(gòu),按照我自己的理解大的軟件首先需要從程序結(jié)構(gòu)上入手分層驅(qū)動(dòng),自己的程序一般是分為設(shè)備層、消息驅(qū)動(dòng)層和業(yè)務(wù)層,層層之間使用消息或者是FIFO驅(qū)動(dòng),這樣DEBUGi起來(lái)定位會(huì)清晰明了,并且各個(gè)業(yè)務(wù)不會(huì)相互牽扯。

技術(shù)層面我一般是用經(jīng)過(guò)自己改良的匈牙利命名法,因?yàn)槌绦虼罅诵枰谎劬湍芘袛喑鰜?lái)函數(shù)變量等等各自的屬性,不能靠猜開(kāi)解決,并且項(xiàng)目做的越多最后遺忘的也就越多,一個(gè)好的命名也方便以后程序的維護(hù)。

有批評(píng)建議請(qǐng)系統(tǒng)完整的有上下文承接,網(wǎng)絡(luò)上有個(gè)段子,我和你說(shuō)法制,你和我談人性,當(dāng)我和你說(shuō)人性的時(shí)候,你又和我談公平,這樣的反復(fù)不利于我這樣的菜鳥(niǎo)學(xué)習(xí)和進(jìn)步,拜托了。
回復(fù)

使用道具 舉報(bào)

31#
ID:1101997 發(fā)表于 2023-12-17 10:17 | 只看該作者
chenmingwu 發(fā)表于 2023-12-14 11:07
可以用輪詢(xún),調(diào)用一個(gè)定時(shí)器,每隔一段時(shí)間去查詢(xún)狀態(tài)

是的,可以這樣處理,這就是我說(shuō)的,每個(gè)功能每個(gè)函數(shù)就應(yīng)該保證是沒(méi)有阻塞的設(shè)計(jì),否則因?yàn)楹瘮?shù)耗時(shí)長(zhǎng)卡滯在一個(gè)功能上就沒(méi)有什么意義了
回復(fù)

使用道具 舉報(bào)

32#
ID:247571 發(fā)表于 2024-2-7 08:01 | 只看該作者
所有順序結(jié)構(gòu)都可以改為輪詢(xún)。還在用順序結(jié)構(gòu)寫(xiě)程序只能說(shuō)明作者是業(yè)余編程愛(ài)好者,無(wú)os軟件編程必須用時(shí)間片經(jīng)典架構(gòu)。delay只能用us級(jí),總延時(shí)不能超過(guò)10us。
回復(fù)

使用道具 舉報(bào)

33#
ID:161164 發(fā)表于 2024-2-7 09:04 | 只看該作者
ljchip 發(fā)表于 2024-2-7 08:01
所有順序結(jié)構(gòu)都可以改為輪詢(xún)。還在用順序結(jié)構(gòu)寫(xiě)程序只能說(shuō)明作者是業(yè)余編程愛(ài)好者,無(wú)os軟件編程必須用時(shí)間 ...

如果遇到DS18B20這類(lèi)咋辦?
回復(fù)

使用道具 舉報(bào)

34#
ID:491577 發(fā)表于 2024-2-7 11:49 | 只看該作者
lkc8210 發(fā)表于 2024-2-7 09:04
如果遇到DS18B20這類(lèi)咋辦?

不用DS18B20,必須對(duì)硬件有一定的要求,什么方法都會(huì)有缺點(diǎn)不可能適用所以情況。DS18B20除了89C52在用之外,其他有AD的都不用。
回復(fù)

使用道具 舉報(bào)

35#
ID:302293 發(fā)表于 2024-2-27 08:38 | 只看該作者
Hephaestus 發(fā)表于 2023-12-13 15:09
又開(kāi)始吹牛了,8位單片機(jī)怎么可能裝得下1萬(wàn)行c代碼?

60K的可以
回復(fù)

使用道具 舉報(bào)

36#
ID:237471 發(fā)表于 2024-3-12 09:12 | 只看該作者
可不可以把這部分做一個(gè)單獨(dú)的分板,讓這塊分板自己去死等,有數(shù)據(jù)了就串口向主板輸出,主板的串口中斷檢測(cè)到就開(kāi)始處理分板的數(shù)據(jù),不知道這樣會(huì)不會(huì)可行
回復(fù)

使用道具 舉報(bào)

37#
ID:137736 發(fā)表于 2024-3-15 15:07 | 只看該作者
網(wǎng)上有個(gè)多定時(shí)器庫(kù)?看看能否分時(shí)。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表