亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于ARM Cortex-M0的SoC單片機(jī)內(nèi)核程序設(shè)計

        2017-11-09 01:11:35,,
        關(guān)鍵詞:流程圖內(nèi)核單片機(jī)

        ,,

        (1.新疆華隆油田科技股份有限公司,克拉瑪依 834000;2.新疆油田數(shù)據(jù)公司;3.南京航空航天大學(xué))

        基于ARMCortex-M0的SoC單片機(jī)內(nèi)核程序設(shè)計

        于玉珠1,殷春莉2,孫浩3

        (1.新疆華隆油田科技股份有限公司,克拉瑪依 834000;2.新疆油田數(shù)據(jù)公司;3.南京航空航天大學(xué))

        隨著信息技術(shù)和物聯(lián)網(wǎng)的迅速發(fā)展,作為物聯(lián)網(wǎng)前端硬件基礎(chǔ)的單片機(jī)得到廣泛應(yīng)用。本系統(tǒng)就是以基于ARM Cortex-M0的HL-LPGC-LPC11C14-8044為硬件平臺,利用C++語言和Real View工具設(shè)計與開發(fā)內(nèi)核軟件,實(shí)現(xiàn)遠(yuǎn)程數(shù)據(jù)采一集和系統(tǒng)控制,同時與云計算服務(wù)中心實(shí)現(xiàn)數(shù)據(jù)交互、為大數(shù)據(jù)處理提供基礎(chǔ)。該系統(tǒng)無人值守和偏遠(yuǎn)區(qū)域覆蓋,節(jié)約了運(yùn)行成本,提升了工業(yè)生產(chǎn)的安全性、可靠性、高效性,綜合效益明顯提高。

        物聯(lián)網(wǎng);SoC;GPRS;數(shù)據(jù)采集;Cortex-M0

        引 言

        單片機(jī)[1]是一種集成電路芯片,是采用超大規(guī)模集成電路技術(shù)把具有數(shù)據(jù)處理能力的中央處理器CPU、隨機(jī)存儲器RAM、只讀存儲器ROM、多種I/O口和中斷系統(tǒng)、定時器/計數(shù)器等功能集成到一塊硅片上構(gòu)成的一個小而完善的微型計算機(jī)系統(tǒng)。經(jīng)歷了SCM、MCU、SoC三大階段,單片機(jī)滲透到我們生活的各個領(lǐng)域。廣泛應(yīng)用于儀器儀表、家用電器、醫(yī)用設(shè)備、航空航天、專用設(shè)備的智能化管理及過程控制等領(lǐng)域,特別是自動控制領(lǐng)域的機(jī)器人、智能儀表、醫(yī)療器械以及各種智能機(jī)械。

        SoC(System on Chip)稱為芯片級系統(tǒng),也稱片上系統(tǒng),包含完整系統(tǒng)并有嵌入軟件的全部內(nèi)容,是集成電路設(shè)計發(fā)展的必然趨勢。單芯片實(shí)現(xiàn)完整的電子系統(tǒng),是IC 產(chǎn)業(yè)未來的發(fā)展方向。目前在性能和功耗敏感的終端芯片領(lǐng)域,特別是物聯(lián)網(wǎng)領(lǐng)域,SoC已占據(jù)主導(dǎo)地位,而且其應(yīng)用正在擴(kuò)展到更廣的領(lǐng)域。

        本程序設(shè)計就是以基于ARM Cortex-M0[2]SoC單片機(jī)的HL-LPGC-LPC11C14-8044為硬件平臺,利用C++語言和Real View工具設(shè)計與開發(fā)該基于μC/OS-II多任務(wù)嵌入式實(shí)時操作系統(tǒng)的SoC內(nèi)核軟件,以實(shí)現(xiàn)遠(yuǎn)程數(shù)據(jù)采集[3]和系統(tǒng)控制,同時與云計算服務(wù)中心實(shí)現(xiàn)數(shù)據(jù)交互,為物聯(lián)網(wǎng)[4]大數(shù)據(jù)處理提供基礎(chǔ)。

        1 系統(tǒng)總體設(shè)計

        本內(nèi)核程序是使用RealView MDK 4.01開發(fā)環(huán)境和C++語言開發(fā)的,是基于μC/OS-II的任務(wù)輪訓(xùn)驅(qū)動型多線程32位軟件,采用C/S方式通過指定服務(wù)端口或串口與遠(yuǎn)端云控制中心進(jìn)行數(shù)據(jù)通信。系統(tǒng)總結(jié)構(gòu)見圖1系統(tǒng)總流程,主要由操作系統(tǒng)的7個功能任務(wù)模塊構(gòu)成,每個任務(wù)模塊又有自己的無限循環(huán)功能子流程組成。通過主線程App_Task_MAIN管理GPRS連接,通過App_Task_OUTPUT、App_Task_INPUT、App_Task_ADC線程處理物聯(lián)網(wǎng)云控制器的輸入、輸出,通過App_Task_GPRS線程處理與云控制中心通信數(shù)據(jù)或指令。

        圖1 總結(jié)構(gòu)圖

        系統(tǒng)的總流程圖見圖2。主要由系統(tǒng)初始化、串行口初始化、通用I/O口初始化、存儲器初始化、模數(shù)轉(zhuǎn)換初始化、GPRS初始化、溫度采集初始化、看門狗初始化共8個初始化函數(shù),1個時鐘設(shè)置函數(shù),1個操作系統(tǒng)初始化函數(shù),以及MAIN操作系統(tǒng)任務(wù)、OUTPUT操作系統(tǒng)任務(wù)、INPUT操作系統(tǒng)任務(wù)、ADC操作系統(tǒng)任務(wù)、AT24C02操作系統(tǒng)任務(wù)、GPRS操作系統(tǒng)任務(wù)、DS18B20操作系統(tǒng)任務(wù)7個功能任務(wù)模塊和1個操作系統(tǒng)啟動函數(shù)構(gòu)成。

        圖2 系統(tǒng)總流程圖

        程序按順序執(zhí)行各個函數(shù),直到操作系統(tǒng)啟動函數(shù)執(zhí)行完成。操作系統(tǒng)啟動后,整個系統(tǒng)的資源管理與調(diào)度交由操作系統(tǒng)管理與調(diào)度,主流程完成。

        程序主要是控制執(zhí)行各種I/O[5]動作,并與遠(yuǎn)端云控制中心進(jìn)行數(shù)據(jù)交互。具體具有以下功能:

        ① 通信方式自動適應(yīng):支持RS232和GPRS上連通信。

        ② 支持IP或域名方式:可通過上位機(jī)軟件設(shè)置。

        ③ 心跳檢測:定時進(jìn)行心跳特征碼掃描。

        ④ AD、DO、DI處理:處理模擬量采集、控制數(shù)字量輸出、接收數(shù)字量輸入。

        ⑤ 通信中斷自動連接:GPRS中斷后系統(tǒng)自動識別并重新建立。

        ⑥ 信息保存功能:設(shè)置數(shù)據(jù)自動保存。

        ⑦ 斷電自動恢復(fù):系統(tǒng)來電后自動運(yùn)行。

        ⑧ I/O掉電保持:斷電后,來電DO輸出狀態(tài)保持為斷電前的狀態(tài)。

        ⑨ 數(shù)據(jù)格式靈活:支持變長和固定長數(shù)據(jù)格式。

        ⑩ 采用C/S模式,數(shù)據(jù)實(shí)時上傳,供云服務(wù)處理。

        2 關(guān)鍵功能實(shí)現(xiàn)

        系統(tǒng)共有7個功能模塊,分別封裝在操作系統(tǒng)的7個任務(wù)模塊里。

        2.1 MAIN任務(wù)模塊

        主要功能是控制與管理GPRS連接,實(shí)現(xiàn)斷線自動重連。實(shí)現(xiàn)的主要函數(shù)為while()、GPRS_Connect()等。MAIN任務(wù)模塊流程圖如圖3所示。

        圖3 MAIN功任務(wù)模塊流程圖

        主要代碼如下:

        while (1){

        if (g_GprsIsConnect==1)

        //GPRS連接狀態(tài),1連接,0未連接

        //SYS_LED快閃(1秒4次)

        else

        g_SysLedDelay = OS_TICKS_PER_SEC/2; //SYS_LED慢閃(1秒1次)

        GPIO_Output(SYS_LED,HIGH);

        OSTimeDly(g_SysLedDelay);

        GPIO_Output(SYS_LED,LOW);

        OSTimeDly(g_SysLedDelay);

        以學(xué)校牽頭組建貴州省護(hù)理職業(yè)教育集團(tuán)為平臺,各成員共同遵守協(xié)議為紐帶,多元主體,利益共通,任務(wù)分?jǐn)?,分別核算,共建共享,風(fēng)險共擔(dān),項目驅(qū)動,實(shí)行新的校院合作模式。我們從最基礎(chǔ)、最容易入手的合作項目開始,由易到難,由淺入深,逐漸增加合作的內(nèi)容和深度。2014年6月,學(xué)校牽頭完成了護(hù)理專業(yè)人才培養(yǎng)模式的重構(gòu),項目中多方合作,各展所長,成果獲得中國職教學(xué)會優(yōu)秀成果二等獎。2015年,學(xué)校成為貴州省康復(fù)學(xué)會康復(fù)護(hù)理專業(yè)主任委員單位,學(xué)校與行業(yè)的深度對接,使護(hù)理專業(yè)教育教學(xué)改革更具有前瞻性、可預(yù)見性和實(shí)用性。

        GPRSTimecnt++;

        if(GPRSTimecnt >=600){ //心跳時間間隔

        GPRSTimecnt=0;

        if(Heartbeatflag==1){

        Heartbeatflag = 0;

        }

        else{

        g_GprsIsConnect=0;

        }

        }

        if(GPRSTimecnt == 30 && !g_GprsIsConnect && !GPIO_GetValue(UART_SEL)){

        if(!GPRS_Connect(GPRSAN,"TCP",ServerIP,ServerPT)){ //GPRS連接

        GPRSTimecnt = 0;

        g_GprsIsConnect=0;

        GPRS_PowerOn();

        }

        }

        WDT_Feed();

        }

        2.2 OUTPUT任務(wù)模塊

        OUTPUT任務(wù)模塊主要功能是控制與管理DO輸出,同時實(shí)現(xiàn)斷線斷電后來電保持功能。實(shí)現(xiàn)的主要函數(shù)為while()、GPIOGetValue()。OUTPUT任務(wù)模塊流程圖如圖4所示。

        圖4 OUTPUT功能任務(wù)模塊流程圖

        主要代碼:

        while (1){

        if(g_output1==1)GPIO_Output(OUTPUT0,HIGH);

        if(g_output1==0)GPIO_Output(OUTPUT0,LOW);

        if(g_output2==1)GPIO_Output(OUTPUT1,HIGH);

        if(g_output2==0)GPIO_Output(OUTPUT1,LOW);

        if(g_output3==1)GPIO_Output(OUTPUT2,HIGH);

        if(g_output3==0)GPIO_Output(OUTPUT2,LOW);

        if(g_output4==1)GPIO_Output(OUTPUT3,HIGH);

        if(g_output4==0)GPIO_Output(OUTPUT3,LOW);

        OSTimeDlyHMSM(0,0,1,0);

        }

        2.3 INPUT任務(wù)模塊

        INPUT任務(wù)模塊主要功能是采集和處理DI、DO狀態(tài),并通過UART上傳。實(shí)現(xiàn)的主要函數(shù)為while()、GPIO_GetValue()、UARTSend()。

        圖5 INPUT功能任務(wù)模塊流程圖

        主要代碼如下:

        while (1){

        p = (char*)malloc(8);

        p[0] = 'D';p[1] = 'I';p[2] = 'G';p[3] = '0';

        if (GPIO_GetValue(INPUT0)==1) p[4] = '0'; else p[4] = '1';

        if (GPIO_GetValue(INPUT1)==1) p[5] = '0'; else p[5] = '1';

        if (GPIO_GetValue(INPUT2)==1) p[6] = '0'; else p[6] = '1';

        if (GPIO_GetValue(INPUT3)==1) p[7] = '0'; else p[7] = '1';

        if(DIG0T>=3600||p[4]!=DIG0B[0]||p[5]!=DIG0B[1]||p[6]!=DIG0B[2]||p[7]!=DIG0B[3]){

        for(i=0; i<4; i++) DIG0B[i]=p[i+4];

        UARTSend((uint8_t*)p, 8);

        DIG0T=0;

        OSTimeDlyHMSM(0,0,1,0);

        }

        p[0] = 'D';p[1] = 'O';p[2] = 'G';p[3] = '0';

        if (GPIOGetValue(2,0)==1) p[4] = '1'; else p[4] = '0';

        if (GPIOGetValue(2,1)==1) p[5] = '1'; else p[5] = '0';

        if (GPIOGetValue(2,2)==1) p[6] = '1'; else p[6] = '0';

        if (GPIOGetValue(2,3)==1) p[7] = '1'; else p[7] = '0';

        if(DOG0T>=3600){

        UARTSend((uint8_t*)p, 8);

        DOG0T=0;

        }

        free(p);

        OSTimeDlyHMSM(0,0,1,0);

        }

        2.4 ADC任務(wù)模塊

        ADC任務(wù)模塊主要功能是采集和處理8路AI的值,并通過UART上傳。實(shí)現(xiàn)的主要函數(shù)為while()、ADC_Read()、UARTSend()。ADC任務(wù)模塊流程圖如圖6所示。

        圖6 ADC功能任務(wù)模塊流程圖

        主要代碼如下:

        while (1){

        p = (char*)malloc(8);

        for(i=0; i<8; i++){

        if((i==7) && (ComCHFlag=='1'))

        j=(uint16_t)(((float)(ADC_Read(i))*300*4.589)/(0x3ff));

        else

        j=(uint16_t)(((float)(ADC_Read(i))*300*1.7070)/(0x3ff));

        if(j<=5) j=0;

        if(AIT[i]>=3600 || jAIB[i]*1.01){

        AIB[i]=j;

        myitoa((int)j, temp, 16);

        p[0]='A';p[1]='I';p[2]=i+0x30;p[3]='0';

        if((i==7)&&(ComCHFlag=='1')){p[0]='S';p[1]='y';p[2]='s';p[3]='U';}

        p[4]='0';p[5]='0';p[6]='0';p[7]='0';

        for(j=0;j

        UARTSend((uint8_t*)p, 8);

        AIT[i]=0;

        OSTimeDlyHMSM(0,0,1,0);

        }

        }

        free(p);

        OSTimeDlyHMSM(0,0,1,0);

        }

        2.5 GPRS任務(wù)模塊

        GPRS任務(wù)模塊主要功能是接收和處理UART傳來的數(shù)據(jù)或指令,并將關(guān)鍵的數(shù)據(jù)存儲到Flash中。實(shí)現(xiàn)的主要函數(shù)為UARTGetReceiveLenght()、memcpy()、UARTSend()、ramtoflash()。

        圖7 GPRS功能任務(wù)模塊流程圖

        接收遠(yuǎn)程服務(wù)器發(fā)來的數(shù)據(jù):

        while(!UARTNewDataArrive); //等待遠(yuǎn)程服務(wù)器發(fā)數(shù)據(jù)

        UARTNewDataArrive = 0;

        lenght=UARTGetReceiveLenght();

        p=(char*)malloc(lenght);

        memcpy(p, UARTBuffer, lenght);//接收數(shù)據(jù)

        for (i=0; i < lenght; i++) UARTBuffer[i]='0';

        //清空UART接收區(qū)

        處理收到的讀Unique ID指令:

        UIdRead();

        strcpy(temp,"DeUID(0x)"); //拷貝字符串

        myitoa(Paramout[4], temp0, 16); //把整型數(shù)字轉(zhuǎn)換為十進(jìn)

        //制字符串

        myitoa(Paramout[3], temp1, 16);

        strcat(temp0," ");

        strcat(temp0,temp1);

        myitoa(Paramout[2], temp1, 16);

        strcat(temp0," ");

        strcat(temp0,temp1);

        myitoa(Paramout[1], temp1, 16);

        strcat(temp0," ");

        strcat(temp0,temp1);

        myitoa(strlen(temp0), datalen, 10);

        strcat(temp,datalen);

        strcat(temp,":");

        strcat(temp,temp0);

        UARTSend((uint8_t*)temp, strlen(temp));

        處理收到的User ID參數(shù)數(shù)據(jù),并存入FlashBuffer:

        strcpy(datalen,"999");//置999,沒找到:時保持該值

        for (j=1;j<=4;j++){//4代表3位十進(jìn)制數(shù)+1位':'

        if(p[i+5+j]==':'){

        for(k=1;k

        datalen[k-1]='

        欧美日韩色| 人人妻人人澡人人爽人人dvd| 亚洲av无码乱码在线观看裸奔| 国产精品久久久久国产a级| 无码一区二区三区网站| 久久精品国产亚洲av沈先生 | 男女射黄视频网站在线免费观看 | 日韩精人妻无码一区二区三区| 国产亚洲精品在线播放| 国色天香中文字幕在线视频| 爱情岛永久地址www成人| 精品9e精品视频在线观看| 精品2021露脸国产偷人在视频| 麻美由真中文字幕人妻| 国内自拍速发福利免费在线观看| 偷偷色噜狠狠狠狠的777米奇| 亚洲综合性色一区| 日本大胆人体亚裔一区二区| 久久久亚洲熟妇熟女av| 国产麻豆md传媒视频| 9久久精品视香蕉蕉| 国产亚洲精品视频网站| 成品人视频ww入口| 永久免费无码av在线网站 | 99精品热这里只有精品| 99精品国产第一福利网站| av新型国产在线资源| 青青草国产精品一区二区| 激情综合欧美| 亚洲国产成人av第一二三区| 欧美性猛交xxx嘿人猛交| 亚洲精品成人区在线观看| 丰满熟妇人妻无码区| 国产三区二区一区久久| 成年女人粗暴毛片免费观看| 欧美精品一级| 女人天堂av免费在线| 国内少妇毛片视频| 性夜夜春夜夜爽aa片a| 日韩精品成人一区二区在线观看| 蜜桃视频在线看一区二区三区 |