• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 設計應用 > 小容量單片機系統的C語言程序結構

    小容量單片機系統的C語言程序結構

    作者: 時間:2016-10-15 來源:網絡 收藏

    引 言:   2002年初,筆者著手寫一個IC卡預付費電表的工作程序,該電表使用Philips公司的8位51擴展型單片機87LPC764,要求實現很多功能,包括熄顯示、負荷計算與控制、指示閃爍以及電表各種參數的查詢等,總之,要使用時間的單元很多。筆者當時使用ASM51完成了這個程序的編寫,完成后的程序量是2KB多一點。后來,由于種種原因,這個程序并沒有真正使用,只是作了一些改動之后用在一個老化設備上進行計時與負荷計算。約一年后,筆者又重新改寫了這些代碼。 1 系統的改進   可以說,這個用ASM51實現的代碼是沒有什么組織性可言的,要什么功能就加入什么功能,弄得程序的結構非常松散,其實這也是導致筆者最終決定重新改寫這些代碼的原因。   大家知道,87LPC764有4KB的Flash ROM,而筆者的程序量只有2KB多點,因而第一個想法是改用作為主要的開發語言,應該不至于導致代碼空間不夠用。其次,考慮到需要定時功能的模塊 (或稱任務,以下統稱任務)較多,有必要對這些任務進行有序的管理。筆者考慮使用時間片輪詢方式,即給每個要求時間管理的任務以一個時間間隔,時間間隔一到,即運行其代碼,達到合理使用系統定時器資源的目的。就51系統而言,一般至少一個定時器可用來進行時間片的輪詢。基于以上的想法,構造了下述數據類型。 typedef unsigned char uInt8 typedef struct { void (*proc)(void); //處理程序 uInt8 ms_count; //時間片大小 } _op_; 數據結構定義好之后,接著就是實現代碼,包括三部分,即初始化數據、時間片的刷新與時間到執行。初始化數據。 #define proc_cnt 0x08 //定義過程或任務數量 //任務棧初始化 code _op_ Op[proc_cnt]={{ic_check,10},{disp_loop,100}, {calc_power,150},{set_led,2},… }; //設置時間片初始值 data uInt8 time_val[proc_cnt]={10,100,150,2,…}; 時間片刷新。 void time_int1(void) interrupt 3 { uInt8 cnt; Time_Counter:=Time_Unit; for(cnt=0;cnt

    本文引用地址:http://www.czjhyjcfj.com/article/201610/307525.htm


    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 青铜峡市| 庆安县| 铜山县| 张家港市| 大理市| 东源县| 金川县| 连云港市| 达日县| 会东县| 宣城市| 周口市| 沐川县| 都匀市| 深州市| 怀仁县| 彭阳县| 静宁县| 教育| 瑞金市| 杨浦区| 洛隆县| 台东县| 呼图壁县| 卢氏县| 华宁县| 长沙市| 凉城县| 亳州市| 巴里| 扶沟县| 鄂托克旗| 广平县| 鄱阳县| 金门县| 台北县| 松滋市| 武功县| 玉环县| 孙吴县| 于都县|