999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于ARM Cortex-M0的SoC單片機內核程序設計

2017-11-09 01:11:35,,
單片機與嵌入式系統應用 2017年10期
關鍵詞:單片機功能系統

,,

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

基于ARMCortex-M0的SoC單片機內核程序設計

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

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

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

物聯網;SoC;GPRS;數據采集;Cortex-M0

引 言

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

SoC(System on Chip)稱為芯片級系統,也稱片上系統,包含完整系統并有嵌入軟件的全部內容,是集成電路設計發展的必然趨勢。單芯片實現完整的電子系統,是IC 產業未來的發展方向。目前在性能和功耗敏感的終端芯片領域,特別是物聯網領域,SoC已占據主導地位,而且其應用正在擴展到更廣的領域。

本程序設計就是以基于ARM Cortex-M0[2]SoC單片機的HL-LPGC-LPC11C14-8044為硬件平臺,利用C++語言和Real View工具設計與開發該基于μC/OS-II多任務嵌入式實時操作系統的SoC內核軟件,以實現遠程數據采集[3]和系統控制,同時與云計算服務中心實現數據交互,為物聯網[4]大數據處理提供基礎。

1 系統總體設計

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

圖1 總結構圖

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

圖2 系統總流程圖

程序按順序執行各個函數,直到操作系統啟動函數執行完成。操作系統啟動后,整個系統的資源管理與調度交由操作系統管理與調度,主流程完成。

程序主要是控制執行各種I/O[5]動作,并與遠端云控制中心進行數據交互。具體具有以下功能:

① 通信方式自動適應:支持RS232和GPRS上連通信。

② 支持IP或域名方式:可通過上位機軟件設置。

③ 心跳檢測:定時進行心跳特征碼掃描。

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

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

⑥ 信息保存功能:設置數據自動保存。

⑦ 斷電自動恢復:系統來電后自動運行。

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

⑨ 數據格式靈活:支持變長和固定長數據格式。

⑩ 采用C/S模式,數據實時上傳,供云服務處理。

2 關鍵功能實現

系統共有7個功能模塊,分別封裝在操作系統的7個任務模塊里。

2.1 MAIN任務模塊

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

圖3 MAIN功任務模塊流程圖

主要代碼如下:

while (1){

if (g_GprsIsConnect==1)

//GPRS連接狀態,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);

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

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任務模塊

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

圖4 OUTPUT功能任務模塊流程圖

主要代碼:

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任務模塊

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

圖5 INPUT功能任務模塊流程圖

主要代碼如下:

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任務模塊

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

圖6 ADC功能任務模塊流程圖

主要代碼如下:

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任務模塊

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

圖7 GPRS功能任務模塊流程圖

接收遠程服務器發來的數據:

while(!UARTNewDataArrive); //等待遠程服務器發數據

UARTNewDataArrive = 0;

lenght=UARTGetReceiveLenght();

p=(char*)malloc(lenght);

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

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

//清空UART接收區

處理收到的讀Unique ID指令:

UIdRead();

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

myitoa(Paramout[4], temp0, 16); //把整型數字轉換為十進

//制字符串

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參數數據,并存入FlashBuffer:

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

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

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

for(k=1;k

datalen[k-1]='

主站蜘蛛池模板: 精品一区二区无码av| 久久久久国产一区二区| 波多野结衣在线se| 色偷偷男人的天堂亚洲av| 国产主播在线一区| 欧美亚洲综合免费精品高清在线观看 | 免费人欧美成又黄又爽的视频| 免费一级全黄少妇性色生活片| 成人国产三级在线播放| 久操中文在线| 国产欧美日韩在线一区| 色婷婷亚洲综合五月| 亚洲高清在线播放| 全部免费毛片免费播放| 国产爽爽视频| 日日拍夜夜操| 青青青国产在线播放| 99人妻碰碰碰久久久久禁片| 18禁黄无遮挡网站| 亚洲天堂网2014| 午夜精品久久久久久久无码软件| 国产女人18水真多毛片18精品 | 亚洲欧洲日韩久久狠狠爱| 亚洲av片在线免费观看| 精品欧美一区二区三区久久久| 久久6免费视频| 99久久精品国产综合婷婷| 欧美成人综合视频| 午夜激情福利视频| 亚洲中文字幕久久精品无码一区| Jizz国产色系免费| 国产青青草视频| 丰满人妻中出白浆| 亚洲一级无毛片无码在线免费视频| 99er精品视频| 67194在线午夜亚洲| 激情六月丁香婷婷四房播| 国产成人综合网| 国产成人精品2021欧美日韩| 亚洲综合婷婷激情| 91精品伊人久久大香线蕉| 国产精品无码久久久久久| 欧美国产日韩在线播放| 久久精品丝袜高跟鞋| 免费亚洲成人| 欧美成在线视频| 国产中文一区二区苍井空| 久久国产精品嫖妓| 国产亚洲精品91| 中文成人在线| 无码中文字幕乱码免费2| 99人妻碰碰碰久久久久禁片| 日韩免费中文字幕| 67194亚洲无码| 蜜桃视频一区| 亚洲国产日韩欧美在线| 91精品啪在线观看国产60岁| 亚洲天堂视频网| 日韩无码视频网站| 成人夜夜嗨| 狠狠色婷婷丁香综合久久韩国 | 亚洲精品欧美日本中文字幕| 97免费在线观看视频| 免费视频在线2021入口| 青草精品视频| 国产福利在线观看精品| 欧美不卡在线视频| 99久久精品久久久久久婷婷| 少妇被粗大的猛烈进出免费视频| 国产成人调教在线视频| 91久久国产成人免费观看| 99精品在线视频观看| 无码精品一区二区久久久| 91精品国产自产在线老师啪l| 国产在线视频福利资源站| 亚洲国产精品人久久电影| 色综合久久88| 国产呦精品一区二区三区网站| 日韩精品欧美国产在线| 在线看AV天堂| 中文字幕有乳无码| a欧美在线|