在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > VxWorks使用說(shuō)明書(shū)(2)

            VxWorks使用說(shuō)明書(shū)(2)

            作者: 時(shí)間:2011-03-12 來(lái)源:網(wǎng)絡(luò) 收藏
            使用步驟

            使用Tornado集成環(huán)境一般需要經(jīng)過(guò)以下步驟:

            運(yùn)行TCP/IP端口管理器Portmapper(portmap.exe)

            運(yùn)行注冊(cè)器Tornado Registry(wtxregd.exe)。如果使用的是試用版,注意是否注冊(cè)成功,是否修改了日期

            運(yùn)行并配置Ftp Server(wtfpd32.exe)。點(diǎn)擊菜單命令Security | Users | rights彈出配置窗口,點(diǎn)擊New User,在New User彈出窗口加入需要加入的用戶(hù)名(注意:要與目標(biāo)機(jī)bootrom或啟動(dòng)軟盤(pán)設(shè)置一致),在改變密碼彈出窗口設(shè)置該用戶(hù)的密碼(注意:要與目標(biāo)機(jī)bootrom或啟動(dòng)軟盤(pán)設(shè)置一致),在Home Directory中設(shè)置相應(yīng)的目錄,MCP750為c:tornadotargetconfigmcp750,MCPN750為c:tornadotarget configmcpn750,X86為c:tornadotargetconfigpc486 ,配置結(jié)束。

            目標(biāo)板上電或復(fù)位

            在控制臺(tái)(MCP750/MCPN750為超級(jí)終端,X86為目標(biāo)機(jī)顯示器)上可以看到啟動(dòng)信息。如果需要修改,在等待用戶(hù)配置時(shí),按c鍵,進(jìn)行相應(yīng)修改。(注意:配置信息要與主機(jī)配置、Ftp服務(wù)器配置一致),修改結(jié)束后,按@鍵重新啟動(dòng)目標(biāo)機(jī)。

            運(yùn)行Tornado(tornado.exe)

            執(zhí)行菜單命令Tools | Target Server | Configure,彈出目標(biāo)服務(wù)器設(shè)置對(duì)話框,點(diǎn)擊New產(chǎn)生一個(gè)新的配置。設(shè)置Description域(可以任意設(shè)置);設(shè)置Target Server域(可以任意設(shè)置);在Change Property域選取Back End項(xiàng)(該項(xiàng)設(shè)置主機(jī)與目標(biāo)機(jī)如何連接,缺省為網(wǎng)口連接,如果使用串口連接,需要修改configall.h文件,重新編譯鏈接VxWorks映象),如果使用網(wǎng)口調(diào)試,選擇wdbrpc,在目標(biāo)IP名或地址域中給出目標(biāo)機(jī)的IP名或地址(建議給出IP名,因?yàn)檫@樣會(huì)快得多),如果給出的是IP名,需要在HOSTS文件中給出IP名與IP地址的對(duì)應(yīng)關(guān)系,如果用串口調(diào)試,選擇wdbserial,選擇相應(yīng)的串口和波特率(注意:此處的串口是指主機(jī)的串口不是目標(biāo)機(jī)的串口);在Change Property域選取Core File and Symbols項(xiàng),選中File項(xiàng)輸入相應(yīng)的文件(MCP750c:tornadotargetconfigmcp750vxWorks,MCPN750為c:tornadotarget configmcpn750vxWorks,在X86平臺(tái)上為c:tornadotargetconfigpc486vxWorks),點(diǎn)擊Launch,運(yùn)行目標(biāo)服務(wù)器。

            執(zhí)行菜單命令File | New 創(chuàng)建一個(gè)新的文件,并打開(kāi)編輯器Editor(該編輯器功能不是很強(qiáng)大,可以使用其它編輯器如Source Insight)。

            單獨(dú)編譯生成的源文件,生成目標(biāo)文件(.o),編譯連接過(guò)程的詳細(xì)介紹請(qǐng)見(jiàn)后面。

            選取相應(yīng)的目標(biāo)服務(wù)器。

            執(zhí)行菜單命令Tools | Debugger運(yùn)行調(diào)試器。
            執(zhí)行菜單命令Debug | Download下載要調(diào)試的目標(biāo)文件(.o)
            在Editor窗口設(shè)置斷點(diǎn)。

            執(zhí)行菜單命令Debug | Run彈出對(duì)話框,要求輸入調(diào)試入口函數(shù),輸入要調(diào)試的函數(shù)。

            進(jìn)行源碼級(jí)調(diào)試
            執(zhí)行菜單命令Tools | Shell運(yùn)行Shell??梢栽赟hell窗口查看/修改全局變量、內(nèi)存,查看任務(wù)列表、各模塊使用內(nèi)存的情況、對(duì)象(如任務(wù)、隊(duì)列、信號(hào)量、定時(shí)器、內(nèi)存分區(qū))等信息。
            執(zhí)行菜單命令Tools | Browser運(yùn)行Browser。在Browser中可以查看任務(wù)列表、各模塊使用內(nèi)存的情況、對(duì)象(如任務(wù)、隊(duì)列、信號(hào)量、定時(shí)器、內(nèi)存分區(qū))等信息。

            6、編譯鏈接

            VxWorks的開(kāi)發(fā)調(diào)試環(huán)境可以把VxWorks內(nèi)核和應(yīng)用分開(kāi),分別加載。 VxWorks內(nèi)核在目標(biāo)機(jī)啟動(dòng)過(guò)程中通過(guò)ftp協(xié)議加載到目標(biāo)機(jī)中運(yùn)行,應(yīng)用模塊在調(diào)試中動(dòng)態(tài)下載,目標(biāo)代理把下載的應(yīng)用模塊動(dòng)態(tài)鏈接到系統(tǒng)中,應(yīng)用模塊的調(diào)試是通過(guò)在用戶(hù)執(zhí)行運(yùn)行命令時(shí)提供入口函數(shù)實(shí)現(xiàn)的。這樣做的好處是需要調(diào)試哪個(gè)模塊就下載那個(gè)模塊調(diào)試,不需下載其它模塊,前期調(diào)試一般使用這種編譯方式。
            VxWorks的開(kāi)發(fā)調(diào)試環(huán)境也提供把應(yīng)用模塊與系統(tǒng)內(nèi)核鏈接在一起,通過(guò)ftp協(xié)議加載執(zhí)行。這需要經(jīng)過(guò)兩個(gè)步驟:把應(yīng)用模塊的入口代碼加到usrConfig.c文件中的usrRoot函數(shù)的尾部;把應(yīng)用模塊編譯鏈接到VxWorks內(nèi)核中,這種編譯鏈接方式一般用于后期調(diào)試。

            下面分類(lèi)對(duì)編譯鏈接進(jìn)行介紹

            6.1 單個(gè)應(yīng)用模塊的編譯

            單個(gè)應(yīng)用模塊的編譯可以通過(guò)使用菜單命令Project | Make Current Source File進(jìn)行編譯,要編譯的源文件必須已經(jīng)用Editor打開(kāi)并且為當(dāng)前窗口。如果要編譯的源文件所在目錄沒(méi)有makefile文件,系統(tǒng)會(huì)提示創(chuàng)建一個(gè)新的makefile文件,確定。在彈出的創(chuàng)建缺省makefile窗口的CPU域選擇相應(yīng)的項(xiàng)(MCP750/MCPN750選擇PPC604,X86選擇I80486),在ADDED_FLAGS域輸入-g,確定。系統(tǒng)對(duì)源文件進(jìn)行編譯,生成目標(biāo)文件(.o)。生成的目標(biāo)文件在Debugger環(huán)境中動(dòng)態(tài)加載,與內(nèi)核動(dòng)態(tài)鏈接到一起。

            6.2 系統(tǒng)內(nèi)核vxWorks的編譯鏈接

            系統(tǒng)內(nèi)核vxWorks是調(diào)試中使用最多的內(nèi)核映象。它被通過(guò)Ftp協(xié)議從主機(jī)加載到目標(biāo)機(jī)中。它的作用通常是進(jìn)行軟硬件初始化,等待加載應(yīng)用模塊,進(jìn)行程序調(diào)試。
            在Project菜單下,選擇相應(yīng)硬件平臺(tái)的生成vxWorks的命令,進(jìn)行編譯鏈接。在編譯鏈接之前先使用clean命令刪除以前生成的文件。

            6.3 應(yīng)用模塊與系統(tǒng)內(nèi)核一起編譯鏈接

            VxWorks的開(kāi)發(fā)調(diào)試環(huán)境也提供把應(yīng)用模塊與系統(tǒng)內(nèi)核鏈接在一起,通過(guò)Ftp協(xié)議加載,vxWorks內(nèi)核自動(dòng)執(zhí)行應(yīng)用模塊。這需要經(jīng)過(guò)兩個(gè)步驟:把應(yīng)用模塊的入口代碼加到usrConfig.c文件中的usrRoot函數(shù)的尾部;在makefile中把待生成的應(yīng)用模塊的目標(biāo)文件名加到宏定義MACH_EXTRA中,再把相應(yīng)的編譯規(guī)則加到makefile中。編譯鏈接生成vxWorks映象。

            6.4 Project菜單下其它編譯鏈接命令介紹

            * vxWorks_rom :可以寫(xiě)到ROM的、沒(méi)有帶符號(hào)表和Shell的、沒(méi)有壓縮的vxWorks。
            * vxWorks.st :帶有符號(hào)表的vxWorks。
            * vxWorks.st_rom:可以寫(xiě)到ROM的、帶有符號(hào)表和Shell的、壓縮的vxWorks。
            * vxWorks.res_rom :可以寫(xiě)到ROM的、帶有符號(hào)表和Shell的、只有數(shù)據(jù)段拷貝到內(nèi)存的、沒(méi)有壓縮的vxWorks。
            * vxWorks.res_rom_nosym:可以寫(xiě)到ROM的、只有數(shù)據(jù)段拷貝到內(nèi)存的、沒(méi)有壓縮的vxWorks。
            * bootrom:壓縮的 bootrom
            * bootrom_uncmp:沒(méi)有壓縮的bootrom
            ※ 作 者: helpyou 01-2-8 下午 08:29:03 ※


            7、調(diào)試時(shí)的常用方法

            下面是一些調(diào)試手段在調(diào)試器中的相應(yīng)命令(操作)
            調(diào)試手段
            相應(yīng)操作
            設(shè)置斷點(diǎn)
            菜單命令Debug|Toggle BreakPoint
            刪除斷點(diǎn)
            菜單命令Debug|Toggle BreakPoint
            運(yùn)行
            菜單命令Debug|Run
            單步執(zhí)行(進(jìn)入函數(shù))
            菜單命令Debug|Step
            單步執(zhí)行(不進(jìn)入函數(shù))
            菜單命令Debug|Next
            繼續(xù)執(zhí)行(停下后的程序)
            菜單命令Debug|Continue
            執(zhí)行完當(dāng)前的函數(shù),停在調(diào)用它的函數(shù)的下一條語(yǔ)句
            菜單命令Debug|Finish
            查看變量的值
            菜單命令Debug|Inspect
            查看當(dāng)前函數(shù)的所有局部變量
            菜單命令Debug|Locals
            查看內(nèi)存
            菜單命令Debug|Memory
            查看寄存器
            菜單命令Debug|Registers
            修改內(nèi)存
            Shell命令m
            修改寄存器
            Shell命令mRegs
            修改變量
            在Shell中直接給該變量賦值(局部變量無(wú)法用此方法修改)
            卸載一個(gè)加載的模塊
            Shell命令unld
            刪除任務(wù)
            Shell命令td
            復(fù)位目標(biāo)機(jī)
            Shell命令reboot
            用該命令的好處:目標(biāo)服務(wù)器自動(dòng)與目標(biāo)代理重新鏈接,Shell自動(dòng)重啟
            查看任務(wù)
            在Browser對(duì)象信息窗口輸入待查看的任務(wù)名或ID
            查看信號(hào)量
            在Browser對(duì)象信息窗口輸入待查看的信號(hào)量名或ID
            查看消息隊(duì)列
            在Browser對(duì)象信息窗口輸入待查看的消息隊(duì)列命或ID
            內(nèi)存分區(qū)
            在Browser對(duì)象信息窗口輸入待查看的內(nèi)存分區(qū)ID
            看門(mén)狗
            在Browser對(duì)象信息窗口輸入待查看的看門(mén)狗ID
            類(lèi)(class)
            在Browser對(duì)象信息窗口輸入待查看的類(lèi)的ID
            查看內(nèi)存使用(模塊使用內(nèi)存的情況)
            Browser的內(nèi)存使用窗口
            查看任務(wù)列表(系統(tǒng)里的所有任務(wù))
            Browser的任務(wù)列表窗口
            查看CPU占用率
            Browser的Spy窗口
            查看堆棧使用情況
            Browser的堆棧檢查窗口

            注:
            * Shell可以通過(guò)菜單命令Debug | Shell啟動(dòng)
            * Shell的原語(yǔ)可以通過(guò)在Shell中輸入help列出
            * Browser可以通過(guò)菜單命令Debug | Browser啟動(dòng)
            * Debugger命令窗口的命令可以通過(guò)在命令窗口輸入help列出

            8、任務(wù)調(diào)試模式下的多任務(wù)調(diào)試

            在任務(wù)調(diào)試模式下,在一個(gè)集成環(huán)境中,在一個(gè)任務(wù)中調(diào)試,在另一個(gè)任務(wù)中設(shè)置斷點(diǎn),設(shè)置的斷點(diǎn)不起作用。這是因?yàn)橐粋€(gè)調(diào)試器只能處理一個(gè)TCB(任務(wù)控制塊),每個(gè)任務(wù)都有一個(gè)TCB,因此一個(gè)調(diào)試器只能調(diào)試一個(gè)任務(wù),要調(diào)試幾個(gè)任務(wù)就要啟動(dòng)幾個(gè)調(diào)試器。一個(gè)集成環(huán)境只能啟動(dòng)一個(gè)調(diào)試器,所以要調(diào)試幾個(gè)任務(wù)就要啟動(dòng)幾個(gè)集成環(huán)境。另外,需要在被調(diào)試的任務(wù)的待調(diào)試的第一條語(yǔ)句前加入taskSuspend(0)語(yǔ)句,掛起該任務(wù),否則任務(wù)就可能會(huì)在調(diào)試前被執(zhí)行。

            下面是多任務(wù)調(diào)試的測(cè)試用例的源代碼
            /* VxWorks includes */
            #include quot;vxWorks.hquot;
            #include quot;taskLib.hquot;
            #include quot;stdio.hquot;
            #include quot;msgQLib.hquot;

            int g_lTaskATid;
            int g_lTaskBTid;
            MSG_Q_ID g_MsgQ1id;
            MSG_Q_ID g_MsgQ2id;

            void MultiTaskTestTaskA(void)
            {
            char cMsgToTaskB[100];
            char cMsgFromTaskB[100];

            sprintf(cMsgToTaskB,quot;To TaskB nquot;);

            printf(quot; Hello from MultiTaskTestTaskA nquot;);

            /*start point of debugging for MultiTaskTestTaskA*/
            taskSuspend(0);

            for(;;)
            {
            printf(quot; Hello from MultiTaskTestTaskA nquot;);

            /*Send message to MultiTaskTestTaskB*/

            msgQSend(g_MsgQ1id,cMsgToTaskB,sizeof(cMsgToTaskB),WAIT_FOREVER, MSG_PRI_NORMAL);

            /*Receive message from MultiTaskTestTaskB*/
            msgQReceive(g_MsgQ2id,cMsgFromTaskB,100,WAIT_FOREVER);
            printf(quot;%squot;,cMsgFromTaskB);
            }

            }

            void MultiTaskTestTaskB(void)
            {
            char cMsgToTaskA[100];
            char cMsgFromTaskA[100];

            sprintf(cMsgToTaskA,quot;To TaskA nquot;);

            printf(quot; Hello from MultiTaskTestTaskB nquot;);

            /*start point of debugging for MultiTaskTestTaskA*/
            taskSuspend(0);

            for(;;)
            {
            printf(quot; Hello from MultiTaskTestTaskB nquot;);

            /*Send message to MultiTaskTestTaskA*/
            msgQSend(g_MsgQ2id,cMsgToTaskA,sizeof(cMsgToTaskA),WAIT_FOREVER, MSG_PRI_NORMAL);

            /*Receive message from MultiTaskTestTaskA*/
            msgQReceive(g_MsgQ1id,cMsgFromTaskA,100,WAIT_FOREVER);
            printf(quot;%squot;,cMsgFromTaskA);
            }
            }


            /*This function spawns MultiTaskTestTaskA and MultiTaskTestTaskB , creates g_MsgQ1id and g_MsgQ2id , is entry for debugging.*/
            void MultiTaskTestInit(void)
            {
            printf(quot; Hello from MultiTaskTestInit nquot;);

            g_MsgQ1id=msgQCreate(20,100,MSG_Q_FIFO);
            if(g_MsgQ1id==NULL)
            {
            printf(quot; ERROR: create g_MsgQ1 error nquot;);
            }

            g_MsgQ2id=msgQCreate(20,100,MSG_Q_FIFO);
            if(g_MsgQ1id==NULL)
            {
            printf(quot; ERROR: create g_MsgQ2 error nquot;);
            }


            printf(quot; Spawning a new task called MultiTaskTestTaskA nnquot;);
            g_lTaskATid = taskSpawn(quot;MultiTaskTestTaskAquot;, 100,0,10000, (FUNCPTR)MultiTaskTestTaskA, 0,0,0,0,0,0,0,0,0,0);
            if(g_lTaskATid == ERROR)
            {
            printf(quot; ERROR: task did not spawn nquot;);
            exit(1);
            }

            printf(quot; Spawning a new task called MultiTaskTestTaskB
            nquot;);
            g_lTaskBTid = taskSpawn(quot;MultiTaskTestTaskBquot;, 100,0,10000, (FUNCPTR)MultiTaskTestTaskB, 0,0,0,0,0,0,0,0,0,0);
            if(g_lTaskBTid == ERROR)
            {
            printf(quot; ERROR: task did not spawn nquot;);
            exit(1);
            }

            exit(0);
            }

            多任務(wù)調(diào)試步驟:
            * 用-g選項(xiàng)編譯源代碼產(chǎn)生目標(biāo)文件
            * 下載產(chǎn)生的目標(biāo)文件
            * 在MultiTaskTestInit函數(shù)的開(kāi)始設(shè)置斷點(diǎn)
            * 把MultiTaskTestInit設(shè)置為調(diào)試任務(wù)的人口函數(shù)
            * 單步執(zhí)行產(chǎn)生MultiTaskTestTaskA任務(wù)的語(yǔ)句后可以在串口(超級(jí)終端)上看到字符串Hello from MultiTaskTestTaskA,用Browser查看任務(wù),可以看到任務(wù)MultiTaskTestTaskA出于掛起態(tài)(suspended),表明程序執(zhí)行了taskSuspend(0)語(yǔ)句。
            * 運(yùn)行另一個(gè)Tornado集成環(huán)境
            * Attach任務(wù)MultiTaskTestTaskA,
            * 在語(yǔ)句msgQReceive(g_MsgQ2id,cMsgFromTaskB,100,WAIT_FOREVER)的下一條語(yǔ)句處設(shè)置斷點(diǎn)
            * 運(yùn)行任務(wù)MultiTaskTestTaskA。可以看到?jīng)]有執(zhí)行到斷點(diǎn)處,用Browser查看任務(wù)狀態(tài),MultiTaskTestTaskA出于阻塞態(tài)(pended),因?yàn)樗诘却ⅰ?
            * 單步執(zhí)行MultiTaskTestInit到產(chǎn)生MultiTaskTestTaskB任務(wù)的下一條語(yǔ)句,可以看到MultiTaskTestTaskB任務(wù)處于掛起態(tài)
            * 再運(yùn)行另一個(gè)Tornado集成環(huán)境
            * Attach任務(wù)MultiTaskTestTaskB,
            * 在語(yǔ)句msgQReceive(g_MsgQ1id,cMsgFromTaskA,100,WAIT_FOREVER)下一條語(yǔ)句處設(shè)置斷點(diǎn)
            * 運(yùn)行任務(wù)MultiTaskTestTaskB??梢钥吹綀?zhí)行到斷點(diǎn)處停下。這是因?yàn)镸ultiTaskTestTaskA任務(wù)已經(jīng)發(fā)送一條消息到MultiTaskTestTaskB的接收隊(duì)列中。
            * 此時(shí),可以看到MultiTaskTestTaskA任務(wù)也運(yùn)行到斷點(diǎn)處,因?yàn)闉镸ultiTaskTestTaskB任務(wù)已經(jīng)發(fā)送一條消息到MultiTaskTestTaskA的接收隊(duì)列中。


            酸菜 (1899-12-30)
            9、系統(tǒng)調(diào)試模式下程序的調(diào)試
            Tornado集成環(huán)境提供兩種調(diào)試模式:任務(wù)調(diào)試模式和系統(tǒng)調(diào)試模式。在任務(wù)調(diào)試模式下,在一個(gè)集成環(huán)境下一個(gè)時(shí)間內(nèi)只能調(diào)試一個(gè)任務(wù)。調(diào)試只影響當(dāng)前被調(diào)試的任務(wù),其它任務(wù)正常運(yùn)行。在系統(tǒng)調(diào)試模式下,可以同時(shí)調(diào)試多個(gè)任務(wù)、中斷服務(wù)程序(ISR),調(diào)試影響整個(gè)系統(tǒng)。
            Tornado1.0集成環(huán)境下,在系統(tǒng)模式下進(jìn)行程序調(diào)試,主機(jī)與目標(biāo)機(jī)之間必須使用串口通信。Tornado2.0集成環(huán)境提供了通過(guò)網(wǎng)口進(jìn)行系統(tǒng)模式調(diào)試的功能。
            系統(tǒng)缺省使用網(wǎng)口通信,如果需要使用串口通信,需要修改文件C: Tornado target config
            } all configAll.h的一些宏定義,修改為:
            #define WDB_COMM_TYPE WDB_COMM_SERIAL /*使用串口通信*/
            #define WDB_TTY_CHANNEL 0 /*使用第一個(gè)串口*/
            #define WDB_TTY_BAUD 38400 /*波特率:38400bps*/

            重新編譯鏈接vxWorks。
            在啟動(dòng)目標(biāo)服務(wù)器時(shí),要選擇串口通信,并進(jìn)行相應(yīng)配置。

            9.1 系統(tǒng)調(diào)試模式下多任務(wù)的調(diào)試:
            調(diào)試使用的源代碼與任務(wù)調(diào)試模式中使用的代碼相同。但是,需要去掉為了能夠在任務(wù)調(diào)試模式下進(jìn)行多任務(wù)調(diào)試的MultiTaskTestTaskA和MultiTaskTestTaskB中的語(yǔ)句taskSuspend(0);。

            多任務(wù)調(diào)試步驟:
            * 用-g選項(xiàng)編譯源代碼產(chǎn)生目標(biāo)文件。
            * 下載產(chǎn)生的目標(biāo)文件。
            * 在MultiTaskTestInit函數(shù)的開(kāi)始設(shè)置斷點(diǎn)。
            * 在Debugger命令窗口輸入命令attach system進(jìn)入系統(tǒng)調(diào)試模式。
            * 在Shell窗口輸入命令sp MultiTaskTestInit產(chǎn)生一個(gè)以MultiTaskTestInit為入口函數(shù)的任務(wù),因?yàn)檎麄€(gè)系統(tǒng)都停下了,新產(chǎn)生的任務(wù)還沒(méi)有執(zhí)行,這可以通過(guò)在Debugger命令窗口輸入命令info threads顯示當(dāng)前系統(tǒng)中的任務(wù)列表看出來(lái)。
            * 執(zhí)行菜單命令Debug | Continue繼續(xù)運(yùn)行程序。
            * 系統(tǒng)在設(shè)置的斷點(diǎn)處停下。
            * 在函數(shù)MultiTaskTestTaskA中的語(yǔ)句msgQReceive(g_MsgQ2id,cMsgFromTaskB, 100,WAIT_FOREVER)的下一條語(yǔ)句處設(shè)置斷點(diǎn)。
            * 在函數(shù)MultiTaskTestTaskB中的語(yǔ)句msgQReceive(g_MsgQ1id,cMsgFromTaskA, 100,WAIT_FOREVER)的下一條語(yǔ)句處設(shè)置斷點(diǎn)。
            * 執(zhí)行菜單命令Debug | Continue繼續(xù)運(yùn)行程序。
            * 程序在任務(wù)MultiTaskTestTaskB中的斷點(diǎn)處停下(為什么不是在任務(wù)MultiTaskTestTaskA中停下?請(qǐng)考慮)。
            * 執(zhí)行菜單命令Debug | Continue繼續(xù)運(yùn)行程序。
            * 程序在任務(wù)MultiTaskTestTaskA中的斷點(diǎn)處停下。
            * 執(zhí)行菜單命令Debug | Continue繼續(xù)運(yùn)行程序。
            * 程序又一次在任務(wù)MultiTaskTestTaskA中的斷點(diǎn)處停下(為什么停兩次?請(qǐng)考慮)。
            * 執(zhí)行菜單命令Debug | Continue繼續(xù)運(yùn)行程序。
            * 程序在任務(wù)MultiTaskTestTaskB中的斷點(diǎn)處停下。

            9.2 中斷服務(wù)程序的調(diào)試
            中斷服務(wù)程序只能在系統(tǒng)調(diào)試模式下調(diào)試,不能在任務(wù)調(diào)試模式下調(diào)試。因?yàn)橹袛喾?wù)程序是作為系統(tǒng)的一部分運(yùn)行,不是以任務(wù)方式運(yùn)行,因此不需要為它產(chǎn)生任務(wù)。

            中斷服務(wù)程序調(diào)試步驟:
            * 用-g選項(xiàng)編譯源代碼產(chǎn)生目標(biāo)文件。
            * 下載產(chǎn)生的目標(biāo)文件。
            * 在MultiTaskTestInit函數(shù)的開(kāi)始設(shè)置斷點(diǎn)。
            * 在Debugger命令窗口輸入命令attach system進(jìn)入系統(tǒng)調(diào)試模式。
            * 執(zhí)行菜單命令Debug | Continue繼續(xù)運(yùn)行程序。
            * 如果產(chǎn)生相應(yīng)的中斷,程序就會(huì)在中斷服務(wù)程序的斷點(diǎn)處停下。進(jìn)行需要的調(diào)試。

            ------------------------全文完------------------------------
            linux操作系統(tǒng)文章專(zhuān)題:linux操作系統(tǒng)詳解(linux不再難懂)


            評(píng)論


            相關(guān)推薦

            技術(shù)專(zhuān)區(qū)

            關(guān)閉