,,
(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]大數據處理提供基礎。
本內核程序是使用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模式,數據實時上傳,供云服務處理。
系統共有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 || j
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]='
主站蜘蛛池模板:
真实国产乱子伦视频|
日韩精品毛片|
国产成人无码播放|
国产欧美另类|
国产精品亚洲专区一区|
亚洲国产日韩欧美在线|
全免费a级毛片免费看不卡|
亚洲 日韩 激情 无码 中出|
免费Aⅴ片在线观看蜜芽Tⅴ|
女同国产精品一区二区|
91欧美在线|
亚洲伊人久久精品影院|
第一区免费在线观看|
97精品伊人久久大香线蕉|
香蕉视频国产精品人|
99久久精品久久久久久婷婷|
美女扒开下面流白浆在线试听|
亚洲日韩在线满18点击进入|
国产另类乱子伦精品免费女|
国产凹凸视频在线观看|
美女高潮全身流白浆福利区|
亚洲综合二区|
国产熟睡乱子伦视频网站|
成人综合在线观看|
亚洲婷婷丁香|
欧美天天干|
成人福利在线观看|
午夜啪啪福利|
亚洲另类第一页|
亚洲中字无码AV电影在线观看|
亚洲视频a|
欧美日韩高清|
国产成人精品一区二区不卡|
国产精品久久久久久搜索|
园内精品自拍视频在线播放|
国产三级国产精品国产普男人|
毛片基地美国正在播放亚洲|
四虎国产在线观看|
亚洲a免费|
亚洲成人www|
91久久国产综合精品女同我|
国产成人三级|
亚洲一区网站|
亚洲精品视频免费观看|
亚洲 欧美 日韩综合一区|
久久 午夜福利 张柏芝|
av在线手机播放|
香蕉伊思人视频|
国产精品福利社|
亚洲最大看欧美片网站地址|
国产精品亚洲αv天堂无码|
亚洲高清免费在线观看|
中文纯内无码H|
亚洲精品无码抽插日韩|
午夜色综合|
91福利片|
青青青国产视频手机|
欧美 国产 人人视频|
久青草免费视频|
中文字幕在线一区二区在线|
在线看片免费人成视久网下载|
国产精品无码一二三视频|
尤物午夜福利视频|
国产精品久久自在自2021|
五月婷婷中文字幕|
欧美一级在线|
国产亚洲美日韩AV中文字幕无码成人|
国产精品大尺度尺度视频|
亚洲av日韩av制服丝袜|
久久综合成人|
精品久久久久成人码免费动漫
|
91欧美亚洲国产五月天|
亚洲免费播放|
欧美日本在线观看|
国产9191精品免费观看|
久久精品最新免费国产成人|
亚洲欧美日韩天堂|
伊人久久婷婷|
国产成人无码综合亚洲日韩不卡|
亚洲精品第1页|
四虎永久免费地址|
好久久免费视频高清|
