音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費(fèi)注冊(cè) 首頁(yè) | 行業(yè)黑名單 | 幫助
維庫(kù)電子市場(chǎng)網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

把自己的51程序的框架放出來(lái),希望對(duì)初學(xué)者有幫助。

作者:yanfengzhu 欄目:單片機(jī)
把自己的51程序的框架放出來(lái),希望對(duì)初學(xué)者有幫助。
把自己的51程序的框架放出來(lái),希望對(duì)初學(xué)者有幫助,如果高手不小心看了,也請(qǐng)?zhí)嵋幌乱庖?jiàn)。

這個(gè)東東寫(xiě)了也有好長(zhǎng)一段時(shí)間了,由于近來(lái)又有了一些想法,加上年底不是很忙了,因此就想對(duì)它進(jìn)行修改。這兩天看過(guò)之后真有點(diǎn)慘不忍睹的感覺(jué),以前怎么會(huì)把簡(jiǎn)單的問(wèn)題搞的那么復(fù)雜呢。

修改起來(lái)不知道怎么下手好了,主要是一些想法不好在51上實(shí)現(xiàn),如果要實(shí)現(xiàn)就要犧牲較大的資源(要么是rom要么是執(zhí)行時(shí)間),今天先把數(shù)據(jù)類型統(tǒng)一了一下,放上來(lái)先,過(guò)幾天再把整理好的放上來(lái)。希望對(duì)初學(xué)者有些許的幫助,也請(qǐng)高手們給些意見(jiàn)和建議。感覺(jué)好長(zhǎng)一段時(shí)間技術(shù)沒(méi)有提高了,唉,郁悶。!

這是我存放東東的地址。
http://yanfeng106.gbaopan.com



* - 本貼最后修改時(shí)間:2007-1-28 19:17:35 修改者:yanfengzhu

2樓: >>參與討論
hotpower
沙發(fā)~~~
 
3樓: >>參與討論
fsaok
.
該位置沒(méi)有任何文件! 

4樓: >>參與討論
fsaok
.
找到了,正在下載中,原來(lái)樓主的地址寫(xiě)錯(cuò)了

5樓: >>參與討論
fsaok
很好
粗略看了一下,樓主的程序框架真的別具一格,欣賞中

6樓: >>參與討論
碧水長(zhǎng)天
還不錯(cuò),感覺(jué)咱們有點(diǎn)類似,也貢獻(xiàn)一下自己的代碼風(fēng)格,望拍磚
讀了lz的main結(jié)構(gòu),感覺(jué)有點(diǎn)類似,不過(guò)個(gè)人認(rèn)為稍微欠缺的是,沒(méi)有對(duì)任務(wù)的執(zhí)行周期進(jìn)行安排,這樣不利于任務(wù)的增刪。在平均處理器時(shí)間足夠的情況下,安排好各個(gè)任務(wù)的執(zhí)行周期,因增減任務(wù)而對(duì)原有任務(wù)的執(zhí)行情況的影響將將被減至最小。




* - 本貼最后修改時(shí)間:2007-5-10 10:36:41 修改者:碧水長(zhǎng)天

7樓: >>參與討論
xwj
LZ程序確實(shí)不錯(cuò),結(jié)構(gòu)很清晰
幫你上傳下

* - 本貼最后修改時(shí)間:2007-1-23 10:26:41 修改者:xwj

http://bbs.21ic.com/upfiles/img/20071/2007123102553300.rar

8樓: >>參與討論
hotpower
倒塌了~~~while(1)+CLS_WDT()是狗論打擊的首要目標(biāo)~~~
 

9樓: >>參與討論
xwj
啊,不看不知道,一看...
原來(lái)是只菜狗啊

殺了吃了!

10樓: >>參與討論
hotpower
倒塌了~~~到菜地里隨便拉條菜狗燉著吃,xwj請(qǐng)客~~~
 
11樓: >>參與討論
碧水長(zhǎng)天
感覺(jué)此狗似乎很菜,但一時(shí)還不特別明白,明天再來(lái)
呵呵,又要長(zhǎng)見(jiàn)識(shí)了,謝謝各位,晚安。。

12樓: >>參與討論
yewuyi
俺比較這樣寫(xiě)main()

void        main(void){
                InitSys();
                while(1){
                  if(flag.bmain){
                          flag.bmain=faultFlag;
                          clrwdt;
                  SWITCH(maincase){
                           case 0:
                                  break;
                           case 1:
                                  break;
                           ...
                           ...
                           ...
                           case n:
                                  break;
                          default:while(1){}; //異常復(fù)位
                                  }
                               }
                        }
                       }
::::
能保證中斷、主程序任意一個(gè)異常的情況下都能讓W(xué)DT動(dòng)作才可以。
flag.bmain必須由中斷驅(qū)動(dòng)產(chǎn)生;
需要添加的任務(wù)加到下面的CASE里面,自己感覺(jué)這樣比較容易寫(xiě)狀態(tài)遷移表。

xwj & hotpower也給俺指點(diǎn)指點(diǎn)……

13樓: >>參與討論
xwj
不錯(cuò),這個(gè)結(jié)構(gòu)值得參考
前臺(tái)任務(wù)基于狀態(tài)遷移(比如界面操作)
后臺(tái)任務(wù)基于中斷(隨機(jī)事件)和時(shí)間片切換(并行輪循)

看門(mén)狗只需檢查并保證前臺(tái)和時(shí)間片輪循正常運(yùn)行即可,當(dāng)然也可附帶檢查或重設(shè)下中斷

這樣子實(shí)際上也就是自己的簡(jiǎn)易OS了

14樓: >>參與討論
yewuyi
呵呵,可以偷懶免掉檢查中斷
假若中斷異常關(guān)閉后,flag.bmain就不能正常產(chǎn)生,從而導(dǎo)致clrwdt不能執(zhí)行,WDT自然就要‘咬人’了……

中斷也比較簡(jiǎn)潔,一般里面就是動(dòng)態(tài)掃描、按鍵20ms消抖;

按鍵鍵意解析及響應(yīng)一般放到main()中的一個(gè)CASE分支里面調(diào)用keyscan()




俺一直想找到更好的程序結(jié)構(gòu)……


15樓: >>參與討論
hotpower
等著所長(zhǎng)來(lái)上課~~~估計(jì)現(xiàn)在農(nóng)忙之中~~~
 

16樓: >>參與討論
yewuyi
所長(zhǎng)的書(shū)俺期待了很久……
可惜不知道到哪兒去了?

17樓: >>參與討論
gtw
看來(lái)英雄草莽所見(jiàn)略同
我的結(jié)構(gòu)和碧水長(zhǎng)天的相似,基于不同的clk進(jìn)行事件驅(qū)動(dòng)
但是這種結(jié)構(gòu)中ClrWDT的時(shí)間間隔也就決定了中間可執(zhí)行指令數(shù)
缺點(diǎn)是有的。

另外yewuyi,多任務(wù)的時(shí)候狀態(tài)機(jī)要拿出去了,是不是。

18樓: >>參與討論
gtw
如樓主所說(shuō)
時(shí)間、速度、代碼量不可兼得~~

19樓: >>參與討論
碧水長(zhǎng)天
關(guān)于喂狗的問(wèn)題,今天思索了一下,總結(jié)如下:
    直接在while(1)內(nèi)無(wú)條件清狗,只能監(jiān)控主程序異常和中斷跑飛的情況,但無(wú)法監(jiān)控中斷被異常關(guān)閉的情況.

     結(jié)構(gòu)修改如下:
#define N 20    /*若主函數(shù)在20個(gè)定時(shí)中斷周期中仍然未執(zhí)行到清除U8Globe_CounterDog計(jì)數(shù)器指令,則判斷主程序異常,可執(zhí)行軟件復(fù)位處理*/
volatile unsigned CHAR U8Globe_CounterDog;  //軟件復(fù)位用計(jì)數(shù)器
volatile bit  fGlobe_EnClsWDT; //允許喂狗標(biāo)志

void main(void){
       test_system_reset(); //測(cè)試系統(tǒng)復(fù)位情況..
       init_system();     
       while(1){
           U8Globe_CounterDog = 0;  //

           ....//任務(wù)代碼
           fGlobe_EnClsWDT = 1;  //在需要狗看門(mén)的地方,設(shè)立此標(biāo)志              
           .... //任務(wù)代碼
      }
}

void interrupt TimerIsr(oid){
     U8Globe_CounterDog ++;
     if (U8Globe_CounterDog > N) ProcTimerOutReset(); //
     else if (fGlobe_EnClsWDT) {  
          CLS_WDT();
          fGlobe_EnClsWDT = 0;
     }
     ...//處理其他事情
}

分析:
優(yōu)點(diǎn):
1 主程序跑飛,則無(wú)法置fGlobe_EnClsWDT標(biāo)志和清計(jì)數(shù)器U8Globe_CounterDog ,則中斷服務(wù)程序也無(wú)法喂狗,將發(fā)生超時(shí)軟件復(fù)位或者看門(mén)狗復(fù)位;
2 若中斷被異常關(guān)閉,則無(wú)法喂狗,將發(fā)生看門(mén)狗復(fù)位;
3 若中斷沒(méi)被關(guān)閉但跑飛,也將無(wú)法喂狗,將發(fā)生看門(mén)狗復(fù)位;

缺點(diǎn):
1 占用一定的中斷處理器時(shí)間;
2 要求TimerIsr優(yōu)先級(jí)為最高;

    若有人覺(jué)得在ISR中喂狗不好,那么也可以反過(guò)來(lái),在TimerIsr中設(shè)立標(biāo)志和清計(jì)數(shù)器,而在主程序中喂狗和處理超時(shí)軟件復(fù)位.

    至于代碼中加了計(jì)數(shù)器U8Globe_CounterDog,個(gè)人覺(jué)得,用戶可以在復(fù)位前做一些工作,不象看門(mén)狗復(fù)位過(guò)程中,用戶無(wú)法控制.

    請(qǐng)hotpower,xwj等前輩點(diǎn)評(píng) 

* - 本貼最后修改時(shí)間:2007-1-23 17:26:27 修改者:碧水長(zhǎng)天

20樓: >>參與討論
gtw
何必
這一點(diǎn)和yewuyi的架構(gòu)類似
不過(guò)是將ClrWDT放到檢測(cè)到時(shí)鐘標(biāo)志后清狗
if (fGlobe_1ms){
    ClrWDT();
    ......
}
只是挪一下地方而已,效果相同

我用兩個(gè)狗,一個(gè)硬件狗,再虛擬一個(gè)軟件狗……哈哈
用軟件狗檢測(cè)異常,提前處理
不過(guò)應(yīng)用還是有限

21樓: >>參與討論
hmin500
程序框架
都是高手,俺看不明白呀

22樓: >>參與討論
yanfengzhu
那么多高人捧場(chǎng)啊!偷樂(lè)ing.
to fsaok:地址錯(cuò)了嗎?我這里確認(rèn)了確實(shí)是這個(gè)地址啊!也許是我的瀏覽器自動(dòng)登陸了吧。

to 碧水長(zhǎng)天: 原來(lái)我也是這么寫(xiě)的,后來(lái)覺(jué)得羅嗦就改了。因?yàn)楫?dāng)是時(shí)間片的整數(shù)倍時(shí),如100MS時(shí),你的1ms,2ms,5ms,10ms,100MS里的任務(wù)都要執(zhí)行,如果這些任務(wù)執(zhí)行的時(shí)間和超過(guò)了2ms, 那么對(duì)1ms的任務(wù)肯定是有影響的。

謝謝xwj的幫忙了。

to hotpower和xwj : 對(duì)于狗論,我確實(shí)沒(méi)什么研究,純菜狗一條.^_^  
而且這個(gè)結(jié)構(gòu)已經(jīng)好久前寫(xiě)的了,我現(xiàn)在的東東里,狗我都懶得理了,一般都是
#define clr_wdt()
一個(gè)空的宏,(哪些狼狗,波斯狗等狗論高者,暴寒ing).
主要是我覺(jué)得影響系統(tǒng)正常工作的就軟件跟硬件,如果內(nèi)部軟件都寫(xiě)得程序不知道跑哪里去,那就是人品問(wèn)題,如果是外部干擾使程序跑飛,那應(yīng)該從根本解決問(wèn)題,而不是依賴小狗。
小狗拉出去溜溜還行!

我曾經(jīng)做了一個(gè)東東在辦公室工作很正常,但是到現(xiàn)場(chǎng)得時(shí)候確跑得斷斷續(xù)續(xù)的,因?yàn)樾」防鲜菑?fù)位單片機(jī)。

請(qǐng)狗論高者仍磚頭。。。!



23樓: >>參與討論
gtw
0
100MS時(shí),你的1ms,2ms,5ms,10ms,100MS里的任務(wù)都要執(zhí)行,如果這些任務(wù)執(zhí)行的時(shí)間和超過(guò)了2ms, 那么對(duì)1ms的任務(wù)肯定是有影響的。

肯定會(huì)的……

24樓: >>參與討論
yanfengzhu
v2版終于該好了。
v2版終于該好了。仍然放在原來(lái)的地方。
http://yanfeng106.gbaopan.com/

在文件的安排上做了較大的修改,更新并調(diào)整了文件。即具體的細(xì)節(jié)上改動(dòng)較大,而思想方面基本沒(méi)什么變化。

因?yàn)楸容^喜歡在cygwin下工作,今天想寫(xiě)個(gè)makefile來(lái)自動(dòng)編譯工程沒(méi)有成功。我已經(jīng)想到了解決的方法,但是想到的這兩個(gè)方法我都不會(huì)?磥(lái)想擺脫uv2這個(gè)ide還是有點(diǎn)困難。∮袥](méi)有對(duì)makefile方面比較精通的高手,能否指點(diǎn)一下。主要的問(wèn)題在包里的ChangeLog文件里。


25樓: >>參與討論
荒野門(mén)士
碧水長(zhǎng)天 ,問(wèn)你一個(gè)問(wèn)題?
else if (U81msCounterA == 1) ProcMotorProtect(); /*2ms周期的任務(wù)*/
中的ProcMotorProtect();程序應(yīng)該是1ms周期的任務(wù),因?yàn)槟愕臉?biāo)志位fGlobe_1ms是一秒標(biāo)志位的, 這只是個(gè)人想法。。有錯(cuò)的說(shuō)一下謝謝
下面幾個(gè)也差不多的,,
else if (U81msCounterB == 1) ProcPwmAdjust();  /*5ms周期的任務(wù)*/

else if (U81msCounterB == 3) ProcSpeedCount();
Proc6sCruise();/*100MS周期的任務(wù)*/


26樓: >>參與討論
joy晴天
先收藏了,好好學(xué)習(xí)
 
27樓: >>參與討論
wnch
收藏起來(lái)學(xué)習(xí)
 
28樓: >>參與討論
碧水長(zhǎng)天
個(gè)人意見(jiàn)
荒野門(mén)士,我的注釋是對(duì)的,請(qǐng)?jiān)僮屑?xì)看看代碼,思考一下。

關(guān)于提到1ms,2ms,5ms等任務(wù)是1ms任務(wù)的整數(shù)倍時(shí),因此對(duì)1ms的任務(wù)有影響的問(wèn)題,我不同意上述幾位同志的觀點(diǎn),我個(gè)人覺(jué)得:
當(dāng)所有Xms的任務(wù)都要執(zhí)行的時(shí)候,此時(shí)是處理器的最大負(fù)荷,設(shè)計(jì)任務(wù)的時(shí)候,要計(jì)算此最大負(fù)荷是否超出了處理器的能力。在滿足處理器能力足夠的情況下,那么,這樣的設(shè)計(jì)會(huì)帶來(lái)這樣的好處:

1 再添加數(shù)量適當(dāng)?shù)姆?ms的任務(wù),不會(huì)對(duì)其他任務(wù)有任何影響,我可以添加到5個(gè)1ms的任務(wù),10個(gè)10ms的任務(wù)等等...;
2 各個(gè)任務(wù)均按照比較嚴(yán)格的時(shí)間周期運(yùn)行,在需要計(jì)時(shí)的時(shí)候(比如鍵盤(pán)掃描、顯示刷新、定時(shí)通信等),均比較方便;


29樓: >>參與討論
happystar
好資料啊。
水平有限,對(duì)這些不太懂,收藏起來(lái),幫前輩們頂頂

30樓: >>參與討論
gtw
比較同意碧水長(zhǎng)天的說(shuō)法
但在系統(tǒng)負(fù)荷最重的情況下其他任務(wù)有可能被滯后……
需要即時(shí)處理的任務(wù)只能放到中斷去

31樓: >>參與討論
happystar
仔細(xì)學(xué)習(xí)了一下,還是不懂
好貼再幫頂一下。我對(duì)這個(gè)模塊花結(jié)構(gòu)很感興趣,增刪都很簡(jiǎn)單啊。但是我不明白:如果你定義一個(gè)大的緩沖區(qū)(全局變量),比如緩沖里的那些變量在每個(gè)模塊都要用到(串口模塊往外發(fā),定時(shí)器模塊顯示它們),這個(gè)緩沖在你的那些文件中具體到哪個(gè)文件定義呢?
本人剛學(xué)MCU,編程都是在一個(gè)文件里的,這樣感覺(jué)結(jié)構(gòu)很糟糕。多謝樓主提供給這么好的結(jié)構(gòu),謝謝拉。
問(wèn)題很菜,別見(jiàn)笑啊。

32樓: >>參與討論
yanfengzhu
答樓上。
你可以添加自己的文件,在自己的文件中定義,也可以在main.c文件中定義。

33樓: >>參與討論
happystar
回樓主
按照你的提示,我把全局變量定義在一個(gè)文件里,類似你程序中的config.h這個(gè)文件。這個(gè)問(wèn)題解決拉。
但是我模塊之間的函數(shù)調(diào)用出現(xiàn)問(wèn)題。模仿你的做法:
在kb_scan.c文件有個(gè)函數(shù)void delay(uchar t);
然后在kb_scan.h中定義了extern void delay(uchar t);
當(dāng)task.c模塊要用到這個(gè)函數(shù)的時(shí)候,在task.c里寫(xiě)入#include "kb_scan.h"
然后在這個(gè)模塊的一個(gè)函數(shù)里調(diào)用它,出現(xiàn)一下提示
TASK.C(83): warning C206: 'delay': missing function-prototype
這個(gè)說(shuō)明delay()缺少函數(shù)原形,沒(méi)有聲明它啊。

謝謝樓主耐心幫助。

34樓: >>參與討論
yanfengzhu
首先你要確認(rèn)你用的是v1版還是v2版。
v1版是很久以前寫(xiě)的,我把它放在網(wǎng)上之前只是把數(shù)據(jù)類型統(tǒng)一了一下。我現(xiàn)在都覺(jué)得那時(shí)把問(wèn)題復(fù)雜化了,所以才會(huì)有v2版的初學(xué)。v1的文件不是放在同一個(gè)目錄的,因此你那樣寫(xiě)是有問(wèn)題的,應(yīng)該改為#include "..\KEYBOARD\kb_scan.h"。建議使用v2版。
還有一個(gè)可能時(shí)你沒(méi)有在config.h文件里使能KEYBOARD_EN,即把按鍵關(guān)閉了,這樣這個(gè)模塊的定義及聲明都被屏蔽了,因此會(huì)提示你沒(méi)有錯(cuò)誤。
#define KEYBOARD_EN    0

建議你不要在KEYBOARD里面定義delay函數(shù),一個(gè)好的建議時(shí)自己寫(xiě)一個(gè)delay.c的文件并在里面定義,或者在misc.c文件里定義。



35樓: >>參與討論
happystar
回樓主
我使用的V2版本的,而且和你的一樣,所有的.h和.c在同一個(gè)目錄下。所以用#include ""。
但是問(wèn)題是為什么我存放全局變量的那個(gè).h可以被每個(gè)模塊調(diào)用,而每個(gè)模塊的出口函數(shù)用extern定義后再調(diào)用不可以呢?它們都是同一目錄啊。
不好意思,讓樓主多費(fèi)心拉

36樓: >>參與討論
yanfengzhu
頭文件只用來(lái)聲明,不要用來(lái)定義變量。
這樣我也不能確定是什么問(wèn)題,如果還是不能解決,你可發(fā)郵件給我。

37樓: >>參與討論
qianlidou
謝謝,學(xué)到很多
謝謝,學(xué)到很多

參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
求助:哪些型號(hào)的SPI接口EEPROM比較常用
有沒(méi)有12位的數(shù)字電位器的賣(mài)
關(guān)于紅外聚焦的問(wèn)題,請(qǐng)解答一下~
有人用Samsung的MCU么?(S3F80JB)
一個(gè)關(guān)于生產(chǎn)的問(wèn)題
免費(fèi)注冊(cè)為維庫(kù)電子開(kāi)發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào)