IC695STK002
這里利用一個實際發生的例子,針對初級工程師經常犯的一個小錯誤,或者經常要走的一個彎路,做了針對性的糾正。希望可以幫到大家,文筆不好文章中有敘述不清的地方大家多多指教。
這篇文章我不是想說編程的規范性的東西,如果你想讓自己的程序文件最起碼直觀的看起來美觀、可讀性強,推薦找華為的“C語言編程規范”。我只想說一說當我們的單片機遇到多個模塊的數據需要處理,類似于“多任務”時我們應該怎么辦?
背景是這樣的,去年9月份開始安排一個工程師開始做電動汽車交流充電樁,機械設計部分由公司機械結構部門負責。充電樁的電子部分總體上分為X個部分(用到的資源),電阻觸摸屏(RS232),M1卡讀寫(RS232),電能計量表(RS485),語音提示(SPI),電力開關(繼電器IO),通訊接口(RS485、CAN)。
工程師做的過程非常勤奮,期間也是困難重重,改了很多個版本,總算今年6月把充電樁立起來了。
咱們來驗收一下吧,結果發現讀卡的時候不能處理觸摸屏,播放語音的時候不能處理讀卡,語音播放不能打斷或者跳躍,反正就是所有事件必須一個一個按部就班的來,一旦操作錯誤就需要多次執行、等待、甚至重新來過。
一個工作3年多的工程師怎么會把產品做成這樣呢?看看程序吧!
一看不要緊,嚇一跳!整個的程序是沒有邏輯的,一條線就往下寫……
While(1){//上電進入主程序或觸發觸摸屏//播放提示語音Delay();//等待播放完畢//讀取M1卡信息Delay();//等待讀卡數據返回//播放提示語音Delay();//等待播放完畢//M1卡數據交互,判定下一步操作及提示Delay();//等待數據處理完畢…………}
這里說這個工程師基本上對于自己設計的產品沒有任何的整體概念,或者說對自己開發的程序用到設計上會有怎樣的實際效果根本就不清楚。
他犯了幾個我們在程序開發過程中最忌諱的幾個問題:
1、delay(死等)這類函數只在應該實驗室驗證某個功能過程中用到,在實際的產品開發時無論是主循環while中,還是其調用的函數中,亦或是中斷服務程序中絕對不可以用到。
2、產品設計的各個子模塊之間的邏輯關系太強,例如:必須等待播音完畢才能讀卡進入下一步操作等。
我們講,產品設計中只有各個事件處理模塊間的邏輯關系弱化,才能更加靈活的進行處理。例如:兩個事件A和B,如果程序開發時將A做成B事件的必要條件,B事件的觸發就必須等待A事件的發生。反之如果A事件作為B事件處理的一個特殊情況,那么程序開發起來就變得靈活很多。
3、沒有考慮到單片機本身是一個單核單任務的架構,每一個事件都會獨占CPU內核,當多個任務模塊同時存在時我們應該對各個事件進行區分,我們應當分情況、分事件實時性要求等區分對待。
IC695STK002 如果您需要訂購產品超過1件,請與我們聯系,我們可以為您提供折扣。
*我們僅采用快遞方式遞送備件。(順豐)
*如果您發現其他供貨商為相同產品提供更為低廉的價格,我們也愿意參照其價格向您提供進一步的折扣。
如果還有其他任何問題,請隨時與我們聯系。
*請讓我們知道您有任何,備品,備件,的需要,我們可以給您進一步的援助,我們等候您的詢盤。
————————廈門光沃自動化設備有限公司———————————————
· ?person:小歐?
· ?Mobile phone:18030229050 ?
· ?Telephone:0592-5709821?
· ?Fax:0592-5917519
· ?QQ:1878187406?
· ?E-mail:1878187406@qq?
IC695STK002
ALLEN BRADLEY 1336S-B060-AA-EN3 USPP 1336SB060AAEN3
ALLEN BRADLEY 1785-L46B NSFP 1785L46B
TEXAS INSTRUMENTS 5110-10 USPP 511010
BALDOR MB7420AB USPP MB7420AB
MITSUBISHI FR-F740-04320-NA USPP FRF74004320NA
HONEYWELL 51401570-100 USPP 51401570100
ALLEN BRADLEY 150-A360NBD USPP 150A360NBD
FANUC A06B-6059-H215-H516 USPP A06B6059H215H516
FOXBORO P0960AW USPP P0960AW
INDRAMAT MDD112D-N-030-N2M-130PB0 USPP MDD112DN030N2M1A
GE FANUC IC3600LRLB1 NSPP IC3600LRLB1
ALLEN BRADLEY 8520-3S10A-BAT-EX4-T1-Y-4-5-7 USPP 85203S
FANUC A06B-0306-B131 USPP A06B0306B131
EEC AEG FPS1623 USPP FPS1623
MODICON AM-M909-023 USPP AMM909023
TOSHIBA VFP1-4550UP-B1 USPP VFP14550UPB1
ALLEN BRADLEY 20DD125A3EYNACASE USPP 20DD125A3EYNACAS
ALLEN BRADLEY 1756-L62 FNFP 1756L62
INDRAMAT DSC3.1-50-115 USPP DSC3150115
ALLEN BRADLEY 8520-3S5A-BAT-EX4-Y-1-4 USPP 85203S5ABATE
SYMAX 8010-SFW401 NSFP 8010SFW401
ALLEN BRADLEY 7552-040 USPP 7552040
INDRAMAT TWM1.1-100-300-W1/115 NSPP TWM11100300W1115
ENDRESS & HAUSER 50P4H-EL0A1RA0BAAA USPP 50P4HEL0A1RA0B
SIEMENS 6FC5110-0DB03-0AA4 NSFP 6FC51100DB030AA4
SQUARE D MEL36800LSG USPP MEL36800LSG
SYMAX 8030-CRM-565 NSFP 8030CRM565
TB WOODS UVC-4050-0H USPP UVC40500H
PHOENIX CONTACT IBS-IP-500-PS-2-BS USPP IBSIP500PS2BS
HARMONIC DRIVE HTL8000-1L-AS-DC USPP HTL80001LASDC
MICROMASS LCT USPP LCT
REXROTH 0-608-830-123 USPP 0608830123
GE FANUC IC3600LSRB1 NSPP IC3600LSRB1
ALLEN BRADLEY 1336E-B060-AE-EN-HA2-L8E USPP 1336eB060AE
KEYENCE CORP LC-2400W USPP LC2400W
ALLEN BRADLEY 1395-A70-D2-P10-P54EN USPP 1395A70D2P10P5
PEAK SCIENTIFIC NM30LA USPP NM30LA
SIEMENS 6ES7-318-2AJ00-0AB0 NSFP 6ES73182AJ000AB0
SQUARE D PEF361600LSG100 USPP PEF361600LSG100
MICROSWITCH LSH6A NSFP LSH6A
ALLEN BRADLEY 1756-L55M13 FNFP 1756L55M13
CUTLER HAMMER NC31200WK USPP NC31200WK
ALLEN BRADLEY 1785-L40L/E USPP 1785L40LE
RELIANCE ELECTRIC 803613-SC USPP 803613SC
SAGINAW MACHINE CO 000W544817 NSPP 000W544817
ALLEN BRADLEY 501564 NSPP 501564
SIEMENS 6ES7-417-4HL00-0AB0 USPP 6ES74174HL000AB0
ALLEN BRADLEY 8520-3S5A-BAT-EX4-T1-Y-4-5-7 USPP 85203S5
ALLEN BRADLEY 1785-L20C USPP 1785L20C
GENERAL ELECTRIC THPC3640BG3TRT1 USPP THPC3640BG3TRT1
SIEMENS 6EC1-652-0A USPP 6EC16520A
ALLEN BRADLEY 1336S-B125-AN-EN USPP 1336SB125ANEN
GE FUJI 6KDV3400Q2B20 NSFP 6KDV3400Q2B20
BURTON MCD-61407/94629 NSPP MCD6140794629
TELEMECANIQUE CR3HB12F21 NSFP CR3HB12F21
KEB COMBIVERT 23.F4.C1R-3410 NSPP 23F4C1R3410
RELIANCE ELECTRIC UGZ3455 USPP UGZ3455
RELIANCE ELECTRIC UVZC3007 USPP UVZC3007
ALLEN BRADLEY 1334-FOB-T4 USPP 1334FOBT4
BOSCH 047826-312 USPP 047826312
ASEA BROWN BOVERI 52614759 NSFP 52614759
ALLEN BRADLEY 5250-LP1 USPP 5250LP1
ASEA BROWN BOVERI ACS800-U1-0140-5-B056-L503-P901 USPP
CUTLER HAMMER HNB31200T USPP HNB31200T
ALLEN BRADLEY 500-GOB-930 USPP 500GOB930
ALLEN BRADLEY 1392-B100-RK-MC-B-F2 USPP 1392B100RKMCBF2
SIEMENS 6RA7-000-0MV62-0 USPP 6RA70000MV620
GENERAL ELECTRIC GESB1200A USPP GESB1200A
WESTINGHOUSE 55B6621A3Y USPP 55B6621A3Y
ALLEN BRADLEY 1756-L55M14 NSFP 1756L55M14
INDRAMAT DDC01.2-N100A-DS01-02-FW USPP DDC012N100ADS010
RELIANCE ELECTRIC SA3000DC140 USPP SA3000DC140
RELIANCE ELECTRIC SA3000DC17.5 USPP SA3000DC175
RELIANCE ELECTRIC SA3000DC70 USPP SA3000DC70
LAMBDA LCS-E-5-OV USPP LCSE5OV
ALLEN BRADLEY 8520-1S10A-BAT-EX4-T1-Y-4-5-7 USPP 85201S
CUTLER HAMMER ND312WK USPP ND312WK
ALLEN BRADLEY 6180-DIIEHLDRECZ USPP 6180DIIEHLDRECZ
SIEMENS 6ES5-944-7UB21 NSPP 6ES59447UB21
ALLEN BRADLEY 4100-212-P USPP 4100212P
GENERAL ELECTRIC 9T83B3036 NSFP 9T83B3036
ALLEN BRADLEY 1336S-B075-AN-EN4-HA1-L6 USPP 1336SB075AN
BALDOR ZD18H-475-EO USPP ZD18H475EO
TEXAS INSTRUMENTS 575-2103 NSFP 5752103
CUTLER HAMMER XKDN400B USPP XKDN400B
MEASUREX 053629-00 USPP 05362900
MEASUREX 08546401 USPP 08546401
INDRAMAT DDC01.2-N100A-DS68-00-FW USPP DDC012N100ADS680
FANUC A06B-6041-H112 USPP A06B6041H112
ALLEN BRADLEY 1336E-B100-AA-EN-HA2-L9E USPP 1336EB100AA
SQUARE D NC36900 NSPP NC36900
CONTROL TECHNIQUES SPMD1604M USPP SPMD1604M
BALDOR KBM3456 NSFP KBM3456
ACCURAY 082157-002 USPP 082157002
GETTYS 110-114 USPP 110114
MOORE PRODUCTS 15799-209 USPP 15799209
MOORE PRODUCTS 15799-209R USPP 15799209R
ALLEN BRADLEY 5250-LP NSPP 5250LP
OMRON 3G8B3-CL001 NSFP 3G8B3CL001
BAILEY CONTROLS 6637033A USPP 6637033A
POWERTEC INDUSTRIAL MOTORS INC C0302N3CH109NNNN NSFP C0
EPSON E2C351S-UL USPP e2c351sul
MARPOSS 3708630010 NSPP 3708630010
ALLEN BRADLEY 1336F-B050-AA-EN USPP 1336FB050AAEN
GE FANUC IC3600LRLB1 USPP IC3600LRLB1
MOORE PRODUCTS 39ACM24BCN USPP 39ACM24BCN
CONTROL TECHNIQUES SPMD1604S USPP SPMD1604S
ALLEN BRADLEY 150-B360NBD USPP 150B360NBD