www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁(yè) > 芯聞號(hào) > 充電吧
[導(dǎo)讀]說(shuō)多了,就此罷了。注意:如有雷同,實(shí)屬巧合,切勿對(duì)號(hào)入座。

    OO思想已經(jīng)出現(xiàn)了20多年,各種成功的實(shí)踐告訴我們它是軟件開(kāi)發(fā)的必然趨勢(shì)。面向?qū)ο缶幊?/strong>(OOP)的一個(gè)關(guān)鍵原則之一就是封裝(encapsulation),把暴露的數(shù)據(jù)封裝起來(lái),盡可能的讓對(duì)象管理它們自己的狀態(tài),因?yàn)檫^(guò)多的依存性會(huì)造就緊耦合(highly coupled)系統(tǒng),使得任何一點(diǎn)小小改動(dòng)都可能造成許多無(wú)法預(yù)料的結(jié)果。而數(shù)據(jù)隱藏/封裝機(jī)制是一個(gè)控制對(duì)象數(shù)據(jù)和狀態(tài)強(qiáng)而有力的方法,它對(duì)外部世界隱藏其內(nèi)部細(xì)節(jié),這就意味著每一個(gè)對(duì)象都應(yīng)該盡可能少的了解系統(tǒng)的其他部分或者被其他部分所了解,這樣一來(lái)一旦發(fā)生了變化,需要了解這一個(gè)變化的對(duì)象會(huì)比較少,因此變化也就相對(duì)容易地進(jìn)行。

    C++之父Bjarne Stroustrup也曾說(shuō)過(guò):“你使用一個(gè)語(yǔ)言特征是因?yàn)槟阈枰皇且驗(yàn)樗嬖凇?。設(shè)計(jì)ucClass(uCosII封裝類(lèi))的初衷是由于過(guò)去很多的實(shí)現(xiàn)都是在C++中完成,深切感受到面向?qū)ο蠓治?、設(shè)計(jì)乃至編程的獨(dú)特魅力?;叵胛④浀腗FC1為win32程序設(shè)計(jì)所帶來(lái)的便利、DriverWork2在PC硬件的驅(qū)動(dòng)開(kāi)發(fā)的高效,促使完成ucClass的設(shè)計(jì)(這里頭沒(méi)有什么高深的學(xué)問(wèn)),其實(shí)更重要的一點(diǎn)是它能改進(jìn)現(xiàn)有的設(shè)計(jì)模式,能讓今后的uCosII相關(guān)開(kāi)發(fā)及維護(hù)變得更加輕松和高效!

    對(duì)于OO我也就幾年的開(kāi)發(fā)經(jīng)驗(yàn),沒(méi)有做過(guò)什么“巨項(xiàng)”,對(duì)于A(yíng)RM也是接觸時(shí)間不長(zhǎng),不過(guò)有一個(gè)概念一直影響著我,“ARM不就是復(fù)雜一點(diǎn)的單片機(jī)嗎”,我想也不應(yīng)該難到那里去。于是有空就玩玩,對(duì)于很多做這行做開(kāi)發(fā)的對(duì)C++這樣的面向?qū)ο缶幊陶Z(yǔ)言大多不甚了解,要想用OO思想來(lái)武裝自己又談何容易啊,這就是一種挑戰(zhàn)習(xí)慣、挑戰(zhàn)思維方式的行為,等于放棄過(guò)去曾經(jīng)為你有效解決難題完成工作的開(kāi)發(fā)模式。在此我也沒(méi)有什么靈丹妙藥可改變這些處境,唯一的建議就是堅(jiān)持及不斷實(shí)踐、只有這樣的思想基礎(chǔ)才能提高成功的機(jī)會(huì)。

    下面簡(jiǎn)單設(shè)計(jì)一個(gè)ucClass的demo程序(當(dāng)然會(huì)可能隱藏了一些bug or error),目標(biāo)板使用的是菲利普LPC2100芯片(周立功的EasyARM 2100開(kāi)發(fā)板),有些頭文件這里就不貼了,旨在看看主程序的結(jié)構(gòu)及設(shè)計(jì)過(guò)程,就讓一些軟件的大蝦們見(jiàn)笑了。

    若有機(jī)會(huì)的我還準(zhǔn)備寫(xiě)幾個(gè)基于OO之上的在嵌入式開(kāi)發(fā)的應(yīng)用demo……

設(shè)計(jì)需求:
使用ucClass設(shè)計(jì)一個(gè)demo程序完成下列任務(wù):

任務(wù)編號(hào)    任務(wù)指責(zé)和功能描述    物理資源占用
1    每間隔1秒蜂鳴器短促發(fā)聲兩次,每10秒間隔使用信號(hào)量通知任務(wù)2,隨后自身進(jìn)入掛起等待狀態(tài)。    蜂鳴器及IO端口
2    無(wú)限等待由任務(wù)1觸發(fā)的信號(hào)量,當(dāng)有信號(hào)時(shí)引發(fā)1秒蜂鳴器長(zhǎng)鳴,其后恢復(fù)任務(wù)1,自身再次進(jìn)入信號(hào)量的無(wú)限等待狀態(tài)中。    蜂鳴器及IO端口
3    孤立任務(wù),簡(jiǎn)單的一秒間隔led1閃爍。    Led1及IO端口
4    孤立任務(wù),通過(guò)檢查key1按鍵狀態(tài)控制led4的二值狀態(tài)(亮/滅)。    key1,led4及IO端口

// main.cpp文件,ucClass測(cè)試主程序
// exdata 2004-8-18

#include "config.h"            // 一些硬件相關(guān)的聲明
#include "GPIO.H"            // GPIO類(lèi)頭文件
#include "ucClass.H"        // uCosII的收集類(lèi)庫(kù)頭文件
/*
// 在瀏覽demo程序時(shí)要注意以下幾點(diǎn):
// 1,帶參數(shù)的對(duì)象構(gòu)造
// 2,靜態(tài)函數(shù)調(diào)用
// 3,帶參數(shù)的派生類(lèi)構(gòu)造
// 4,虛擬函數(shù)重載
// 5,特別注意一些頭文件(不在此文檔中)包含寫(xiě)法及原有C函數(shù)聲明方法,關(guān)注extern "C"
// 6,不拘泥于傳統(tǒng)的設(shè)計(jì)思想(模式)
// 7,比較不使用class時(shí)候又是如何處理的?分析每個(gè)對(duì)象背后隱藏了什么?
*/

/************************** 全局變量 *****************************/

// 定義幾個(gè)task對(duì)象,這是實(shí)例化對(duì)象,隱藏并實(shí)現(xiàn)了任務(wù)棧的構(gòu)造
CTask     t1(128);        // 參數(shù)是任務(wù)堆棧分配大小(在A(yíng)RM中以32bit為單位)
CTask     t2(64);
CTask     t3(64);

CSem      t2WaitEvent;        // 定義一個(gè)信號(hào)量對(duì)象用于任務(wù)t1、t2通信
CGPIO     buzz("P0.7",1);    // 定義一個(gè)GPIO對(duì)象,輸出模式,用于控制蜂鳴器
/*
// 前置聲明幾個(gè)任務(wù)運(yùn)行函數(shù),這個(gè)與C模式下沒(méi)有什么區(qū)別。
// 還保留這種處理方法僅僅為求兼顧一些使用uCosII習(xí)慣,建議參考CMyTask的
// 設(shè)計(jì)及t4的定義,使用子類(lèi)設(shè)計(jì)實(shí)現(xiàn)具體任務(wù)的處理方法要比C模式的的全局
// 孤立啟動(dòng)函數(shù)更具有設(shè)計(jì)上及維護(hù)上的優(yōu)點(diǎn),當(dāng)做一個(gè)中大型項(xiàng)目時(shí)候效果尤
// 為明顯。
*/
void t1Run(void *p);
void t2Run(void *p);
void t3Run(void *p);

/*******************************************************************/

/*
// t1任務(wù)運(yùn)行函數(shù)。
// 功能:每間隔1秒蜂鳴器短促發(fā)聲兩次,每10秒間隔使用信號(hào)量t2WaitEvent通
// 知任務(wù)t2,隨后自身進(jìn)入掛起等待狀態(tài)。
*/
void t1Run(void *p)
{
    TargetInit();        // 初始化硬件目標(biāo)板
    
    INT32U i = 0;
    
    while(1)
    {
        CuCos::TimeDlyHMSM(0,0,1,0);
        
        if(++i == 10)
        {
            i = 0;
            t2WaitEvent.Post();
            t1.Suspend();
        }
        
        // 蜂鳴器短促發(fā)聲兩次
        buzz.Clear();
        CuCos::TimeDlyHMSM(0,0,0,50);
        buzz.Set();
        CuCos::TimeDlyHMSM(0,0,0,50);
        buzz.Clear();
        CuCos::TimeDlyHMSM(0,0,0,50);
        buzz.Set();
    }
    
    p = p;
}
/*
// t2任務(wù)運(yùn)行函數(shù)。
// 功能:無(wú)限等待信號(hào)量t2WaitEvent,當(dāng)有信號(hào)時(shí)引發(fā)1秒蜂鳴器長(zhǎng)鳴,其后恢
// 復(fù)t1任務(wù),任務(wù)t2再次自身進(jìn)入信號(hào)量t2WaitEvent的無(wú)限等待狀態(tài)。
*/
void t2Run(void *p)
{
    INT8U err = 0;
    
    while(1)
    {
        t2WaitEvent.Pend(0,&err);

        buzz.Clear();
        CuCos::TimeDlyHMSM(0,0,1,0);
        buzz.Set();
        
        CuCos::TimeDlyHMSM(0,0,0,50);
        
        t1.Resume();
    }
    
    p = p;
}
/*
// t3任務(wù)運(yùn)行函數(shù)。
// 功能:簡(jiǎn)單的一秒間隔led1閃爍。
*/
void t3Run(void *p)
{
    static CGPIO led1("P0.22",1);
    
    while(1)
    {
        led1.Set();
        CuCos::TimeDlyHMSM(0,0,1,0);
        led1.Clear();
        CuCos::TimeDlyHMSM(0,0,1,0);
    }
    
    p = p;
}

/*
// 為求原汁原味體現(xiàn)一個(gè)task對(duì)象的封裝,下面設(shè)計(jì)一個(gè)子類(lèi)實(shí)現(xiàn)一個(gè)特定任務(wù)
// 的處理,在此我們可以認(rèn)為一個(gè)任務(wù)就是一個(gè)子系統(tǒng),通過(guò)一個(gè)子類(lèi)表現(xiàn)一個(gè)
// 特有任務(wù)的具體屬性和行為,注意這種設(shè)計(jì)方法與傳統(tǒng)的面向?qū)ο缶幊?/strong>模式是
// 有區(qū)別的。子系統(tǒng)是一個(gè)有自主能力主體,例如在MyTask子系統(tǒng)中我們有兩
// 個(gè)IO資源m_key1和m_led4分別對(duì)應(yīng)著電路板上的按鍵Key1和發(fā)光二極管Led4,
// 通過(guò)檢查key1按鍵狀態(tài)控制led4的二值狀態(tài)(亮/滅)。重載基類(lèi)了Run函數(shù)為
// 求體現(xiàn)類(lèi)的封裝特性及表現(xiàn)一個(gè)任務(wù)的內(nèi)聚能力,它是一個(gè)強(qiáng)制的運(yùn)行接口,
// 當(dāng)任務(wù)啟動(dòng)時(shí)便能自動(dòng)地從重載的Run函數(shù)開(kāi)始運(yùn)行(具體調(diào)用的中轉(zhuǎn)過(guò)程在
// 基類(lèi)中已經(jīng)實(shí)現(xiàn))。
*/
class CMyTask : public CTask    // 注意這里的派生關(guān)系?。。?BR>{
public:
CMyTask(INT32U StkSize) : CTask(StkSize),m_key1("P0.16",0),m_led4("P0.25",1,0)
    {
        // 注意帶參數(shù)的構(gòu)造處理方法?。?!
    }
    
protected:
    virtual void Run(void *p);    // 需要重載Run()函數(shù)實(shí)現(xiàn)任務(wù)執(zhí)行
    
private:
// 這是任務(wù)用到的一些資源定義,當(dāng)然添加子系統(tǒng)的其他的屬性和方法也是允許的
    CGPIO m_key1;
    CGPIO m_led4;
};
/*
// t4任務(wù)運(yùn)行函數(shù)。
// 通過(guò)函數(shù)重載實(shí)現(xiàn)重寫(xiě)Run函數(shù),該函數(shù)也就是任務(wù)運(yùn)行函數(shù)。
// 功能:通過(guò)檢查key1按鍵狀態(tài)控制led4的二值狀態(tài)(亮/滅)。
*/
void CMyTask::Run(void *p)                    // Run函數(shù)將會(huì)被uCosII系統(tǒng)自動(dòng)運(yùn)行!
{
    while(1)
    {
        if(m_key1.GetStatus() == 0)            // 判斷按鍵是否按下
        {
            if(m_led4.GetStatus() == 0)
            {
                m_led4.Set();
            }
            else
            {
                m_led4.Clear();
            }
            
            while(m_key1.GetStatus() == 0)
            {
                CuCos::TimeDly(20);            // 等待按鍵釋放
            }
            
        }
        else
        {
            CuCos::TimeDly(10);
        }
    }
    
    p = p;
}
/*
// 注意一般應(yīng)該把上面的CMyTask定義及實(shí)現(xiàn)另行寫(xiě)在其他的文件中!把它寫(xiě)在
// 這里僅僅為求說(shuō)明方便。
*/

/*-------------------------------------------------------------------------------------------------*/

CMyTask     t4(128);    //注意任務(wù)對(duì)象t4是由CMyTask實(shí)例化的對(duì)象

// 看看這個(gè)簡(jiǎn)潔的main函數(shù),這時(shí)候您想到了什么?

int main()
{
    CuCos::Init();        // uCosII的系統(tǒng)函數(shù),用于初始化uCosII,等效于OSInit()
    
    t2WaitEvent.Create();        // 創(chuàng)建t2WaitEvent的信號(hào)量
    
    // 創(chuàng)建任務(wù)(參數(shù)指定任務(wù)函數(shù)啟動(dòng)地址、任務(wù)函數(shù)參數(shù)和優(yōu)先級(jí))
    t1.Create(t1Run,NULL,1);    
    t2.Create(t2Run,NULL,2);
    t3.Create(t3Run,NULL,3);
    
    t4.Create(NULL,4);            // 創(chuàng)建任務(wù),注意Create函數(shù)的重載
    
    CuCos::Start();            // 等效于OSStart()
    
    return 0;
    
}



關(guān)于我……:

    我是一個(gè)不折不扣硬件的狂熱者、焊機(jī)派,自會(huì)使用圓珠筆的年齡開(kāi)始就愛(ài)上了烙鐵,開(kāi)始玩弄萬(wàn)用表,在高考后足足整理了兩箱電路板運(yùn)回老家,因?yàn)橐酵獾厣蠈W(xué)我這些家當(dāng)父母都幫我好好的“封存”。我可以自信及自豪地對(duì)那些比我大10歲的硬件工程師說(shuō):我焊板子的時(shí)候你還不知道什么是電阻電容呢!雖然對(duì)硬件有豐富感性認(rèn)識(shí)及解不開(kāi)的情結(jié),但我現(xiàn)在清楚的明白到一點(diǎn),就算是天天在長(zhǎng)江黃河里泡大的孩子也不是個(gè)個(gè)都能登上奧運(yùn)游泳項(xiàng)目的領(lǐng)獎(jiǎng)臺(tái),近些年硬件的發(fā)展也很快,現(xiàn)在自己在硬件上的工作也相對(duì)較少,沒(méi)有什么鍛煉的機(jī)會(huì),三人行,必有我?guī)?,現(xiàn)在身邊牛人不少,也是一個(gè)學(xué)習(xí)的機(jī)會(huì)。對(duì)于軟件開(kāi)發(fā)我也不是行家(更談不上什么程序員),比起有十幾年開(kāi)發(fā)經(jīng)驗(yàn)的老前輩還是太嫩!用老江的話(huà)說(shuō)就是too simple、sometimes naive!不過(guò)有愛(ài)好就可以發(fā)燒(在低于0度的室溫下對(duì)著黑底白字的debug窗口熬上幾個(gè)夜晚通宵不是一件容易的事情……這樣一不小心就回發(fā)燒~~~)。以前做51也是從ASM開(kāi)始,馬老和Franklin帶給我第一次[硬件+C]的喜悅。在大二的時(shí)候就和畢業(yè)生混在一起搞畢業(yè)設(shè)計(jì),現(xiàn)在想起來(lái)這分明就是害了人家,不分明是一個(gè)搶手么?雖然不是求什么利益,只在乎有發(fā)揮和動(dòng)手的機(jī)會(huì),對(duì)這些鍛煉我樂(lè)此不疲,接下來(lái)的大學(xué)生活都是在項(xiàng)目中度過(guò)(錯(cuò)失了很多陪mm花前月下的機(jī)會(huì)~~~),那時(shí)候軟硬件都做(專(zhuān)門(mén)有中間人聯(lián)系或者朋友介紹),就大三一年下來(lái)的開(kāi)發(fā)報(bào)酬剩下來(lái)的就大于10K(對(duì)于很多工作后的人來(lái)說(shuō)這也算不了什么,明顯我也不是一個(gè)揮霍的人)。那時(shí)候在學(xué)校帶領(lǐng)著一個(gè)學(xué)生的科技團(tuán)體,為學(xué)校、組織爭(zhēng)得不少得榮譽(yù),這當(dāng)然也包括為自己。回想過(guò)去,更值得懷念得是那些志同道合的朋友們,有師兄、有同學(xué)還有師弟和體諒我的學(xué)院和老師……,無(wú)論是技術(shù)還是生活上都不能缺少,有著開(kāi)心快樂(lè)的日子……!現(xiàn)在在一家公司做開(kāi)發(fā),軟件硬件也不怎么分了,自從做了一個(gè)硬件項(xiàng)目后就好像轉(zhuǎn)向了軟件開(kāi)發(fā)(懷疑在掉價(jià),他們都說(shuō)做硬件的吃香、干得久),反正現(xiàn)開(kāi)的工作性質(zhì)還算開(kāi)心愉快、又不怎么需要養(yǎng)家糊口的,所以生活還算輕松(就是回家后要自己做飯,嗚嗚~~~)。

    說(shuō)了這么多,我只想說(shuō)明的一點(diǎn)是我并不是寫(xiě)了幾個(gè)hello world就用C++在這里大呼小叫,一些經(jīng)驗(yàn)一些想法都是實(shí)踐的體會(huì),拿上來(lái)獻(xiàn)丑不要介意p,很多時(shí)候只想分享一下開(kāi)發(fā)中的愉悅,為求拋磚引玉。

    技術(shù)從來(lái)都只是一種手段,一個(gè)好的方法可讓您少掉好幾根頭發(fā),養(yǎng)妻活兒我可不敢包,但是做一個(gè)sohu的開(kāi)發(fā)人員總是可以的吧,若是自?shī)首詷?lè)的則有更高的境界和追求。

多掌握一門(mén)技能就就多一條出路,生活多了一把小刀,工作也就少一點(diǎn)磨難。知識(shí)和學(xué)問(wèn)最終以經(jīng)驗(yàn)的形式沉淀在你的大腦中,是你終生受用!

    說(shuō)多了,就此罷了。注意:如有雷同,實(shí)屬巧合,切勿對(duì)號(hào)入座。

    愿大家工作愉快!

    BTW,今天開(kāi)學(xué)了,非常懷念我遠(yuǎn)方的同學(xué)和朋友,愿他們身體健康,在生活及技術(shù)道路上一馬平川!

                                                exdata 2004-9-1
本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀(guān)點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車(chē)的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車(chē)技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車(chē)工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車(chē)。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車(chē) 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶(hù)希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱(chēng),數(shù)字世界的話(huà)語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱(chēng)"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉