chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

一種用于嵌入式通信傳輸和存儲(chǔ)設(shè)備的C語(yǔ)言實(shí)現(xiàn)方法

嵌入式情報(bào)局 ? 來(lái)源:嵌入式情報(bào)局 ? 2023-08-03 10:38 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

摘要:各種類型的數(shù)據(jù)傳輸和存儲(chǔ)就涉及到大小端的問(wèn)題,首先要簡(jiǎn)單說(shuō)下芯片的大小端問(wèn)題,這里主要討論Cortex-M內(nèi)核。

831ff7d0-3137-11ee-9e74-dac502259ad0.png

M內(nèi)核支持大端或者小端,實(shí)際應(yīng)用中大部分內(nèi)核都是小端。以STM32為例,全部都是小端,而且是芯片設(shè)計(jì)之初就固化進(jìn)去的,不可修改。市面上其他廠家基本也都固化的小端格式。

F1編程手冊(cè)

835910b0-3137-11ee-9e74-dac502259ad0.png

F3和F4編程手冊(cè)

83789084-3137-11ee-9e74-dac502259ad0.png

F7和H7編程手冊(cè)

83892124-3137-11ee-9e74-dac502259ad0.png

各種數(shù)據(jù)類型編程EEPROM,SPI Flash等存儲(chǔ)器的簡(jiǎn)易方法,一般這些存儲(chǔ)器都是字節(jié)編程,寫入浮點(diǎn)等數(shù)據(jù)類型時(shí)不太方便。這里分享一個(gè)方法,定義一個(gè)結(jié)構(gòu)體,將各種數(shù)據(jù)類型封裝進(jìn)去

839f76cc-3137-11ee-9e74-dac502259ad0.png

寫入的時(shí)候采用下面方式:

83aded92-3137-11ee-9e74-dac502259ad0.png

讀取時(shí)可以采用下面方式:

83c7dd06-3137-11ee-9e74-dac502259ad0.png

各種數(shù)據(jù)類型的SPI,UART,I2C等傳輸問(wèn)題。這里我們以串口通信為例,比如主機(jī)要發(fā)送如下格式數(shù)據(jù)給從機(jī):

83eb7432-3137-11ee-9e74-dac502259ad0.png

我們可以做一個(gè)如下結(jié)構(gòu)體格式:

typedefstruct
{
uint8_tucStart;

uint16_tusCO2;
uint16_tusPM25;
uint16_tusHumidity;
floatTemprature;
uint32_tulParam;
uint8_tucEnd1;
uint8_tucEnd2;
}
UART_T;

UART_Tg_tUartParam;

主機(jī)發(fā)送的時(shí)候我們就可以采用如下方法:

comSendBuf(COM1,(uint8_t*)&g_tUartParam,sizeof(UART_T));

從機(jī)工程也定義一個(gè)同樣的結(jié)構(gòu)體變量,比如我們把接收到一幀數(shù)據(jù)存到緩沖uint8_t buf[50]里面了。

我們就可以定義一個(gè)結(jié)構(gòu)體指針變量:

UART_T*pUartParam;
pUartParam=(UART_T*)buf;

那么我們就可以pUartParam->usCO2,pUartParam->Temprature等方式來(lái)訪問(wèn),非常方便。

代碼實(shí)現(xiàn)

結(jié)構(gòu)體數(shù)據(jù)如下:

typedefstruct
{
uint8_tucStart;

uint16_tusCO2;
uint16_tusPM25;
uint16_tusHumidity;
floatTemprature;
uint32_tulParam;
uint8_tucEnd1;
uint8_tucEnd2;
}
USART_T;

USART_Tg_tUartParam;/*串口1發(fā)送數(shù)據(jù)使用*/
USART_T*pUartParam;/*串口2接數(shù)據(jù)使用*/
uint8_tbuf[128];/*接收記錄緩沖*/

數(shù)據(jù)收發(fā)處理:

/*
*********************************************************************************************************
*函數(shù)名:main
*功能說(shuō)明:c程序入口
*形參:無(wú)
*返回值:錯(cuò)誤代碼(無(wú)需處理)
*********************************************************************************************************
*/
intmain(void)
{
uint8_tucKeyCode;
uint8_tread;
uint8_tucStatus=0;/*狀態(tài)機(jī)標(biāo)志*/
uint8_tucCount=0;
floatftest=0.11f;
pUartParam=(USART_T*)buf;


bsp_Init();/*硬件初始化*/

PrintfLogo();/*打印例程名稱和版本等信息*/
PrintfHelp();/*打印操作提示*/


bsp_StartAutoTimer(0,100);/*啟動(dòng)1個(gè)100ms的自動(dòng)重裝的定時(shí)器*/

memset(buf,0,128);

/*進(jìn)入主程序循環(huán)體*/
while(1)
{
bsp_Idle();/*這個(gè)函數(shù)在bsp.c文件。用戶可以修改這個(gè)函數(shù)實(shí)現(xiàn)CPU休眠和喂狗*/

/*判斷定時(shí)器超時(shí)時(shí)間*/
if(bsp_CheckTimer(0))
{
/*每隔100ms進(jìn)來(lái)一次*/
bsp_LedToggle(2);
}

/*按鍵濾波和檢測(cè)由后臺(tái)systick中斷服務(wù)程序?qū)崿F(xiàn),我們只需要調(diào)用bsp_GetKey讀取鍵值即可。*/
ucKeyCode=bsp_GetKey();/*讀取鍵值,無(wú)鍵按下時(shí)返回KEY_NONE=0*/
if(ucKeyCode!=KEY_NONE)
{
switch(ucKeyCode)
{
caseKEY_DOWN_K1:/*K1鍵按下,串口1發(fā)送數(shù)據(jù)給串口2*/
g_tUartParam.ucStart='$';
g_tUartParam.usCO2=1;
g_tUartParam.usPM25=2;
g_tUartParam.usHumidity=3;
g_tUartParam.Temprature=ftest++;
g_tUartParam.ulParam=5;
g_tUartParam.ucEnd1='
';
g_tUartParam.ucEnd2='
';
comSendBuf(COM1,(uint8_t*)&g_tUartParam,sizeof(UART_T));
printf("發(fā)送數(shù)據(jù)完成
");
break;

default:
/*其它的鍵值不處理*/
break;
}
}

/*串口2接收數(shù)據(jù)解析處理*/
if(comGetChar(COM2,&read))
{
switch(ucStatus)
{
/*狀態(tài)0保證接收到0x01*/
case0:
if(read=='$')
{
ucStatus=1;
buf[ucCount++]=read;
}
break;

case1:
buf[ucCount]=read;

/*接收夠15個(gè)數(shù)據(jù)*/
if((buf[ucCount-1]=='
')&&(buf[ucCount]=='
'))
{
/*打印接收到的數(shù)據(jù)值*/
printf("接收到的數(shù)據(jù):
");
printf("pUartParam->usCO2=%d
",pUartParam->usCO2);
printf("pUartParam->usPM25=%d
",pUartParam->usPM25);
printf("pUartParam->usHumidity=%d
",pUartParam->usHumidity);
printf("pUartParam->Temprature=%f
",pUartParam->Temprature);
printf("pUartParam->ulParam=%d
",pUartParam->ulParam);
printf("
");

memset(buf,0,128);
ucStatus=0;
ucCount=0;
}
else
{
ucCount++;
}
break;

default:
break;
}
}
}
}

測(cè)試效果

83fbc42c-3137-11ee-9e74-dac502259ad0.png?

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5175

    文章

    19977

    瀏覽量

    324433
  • 內(nèi)核
    +關(guān)注

    關(guān)注

    4

    文章

    1427

    瀏覽量

    42230
  • STM32
    +關(guān)注

    關(guān)注

    2301

    文章

    11073

    瀏覽量

    369386
  • C語(yǔ)言
    +關(guān)注

    關(guān)注

    183

    文章

    7634

    瀏覽量

    143923
  • Cortex-M
    +關(guān)注

    關(guān)注

    2

    文章

    232

    瀏覽量

    30823

原文標(biāo)題:一種用于嵌入式通信傳輸以及存儲(chǔ)設(shè)備的簡(jiǎn)易C語(yǔ)言實(shí)現(xiàn)方法

文章出處:【微信號(hào):嵌入式情報(bào)局,微信公眾號(hào):嵌入式情報(bào)局】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    嵌入式軟件開發(fā)語(yǔ)言 嵌入式C編程到底是什么呢?是C語(yǔ)言的變形么?

    編寫開發(fā)過(guò)程的復(fù)雜性,通常不選擇它用于嵌入式系統(tǒng)開發(fā),而C語(yǔ)言一種“低層次”的語(yǔ)言,已經(jīng)成為
    發(fā)表于 12-26 15:15

    一種嵌入式系統(tǒng)用于多媒體實(shí)時(shí)數(shù)據(jù)的網(wǎng)絡(luò)傳輸設(shè)計(jì)

    (內(nèi)存管理單元),很適合于許多低端的、沒(méi)有MMU的嵌入式處理器。本文設(shè)計(jì)了一種嵌入式系統(tǒng)用于多媒體實(shí)時(shí)數(shù)據(jù)的網(wǎng)絡(luò)傳輸。ARM內(nèi)核處理器與
    發(fā)表于 06-19 05:00

    嵌入式系統(tǒng)對(duì)通信有什么需求?

    嵌入式系統(tǒng)之間的通信通常有兩方式:并行通信和串行通信。并行方式傳輸數(shù)據(jù)速度快,但占用的
    發(fā)表于 08-09 08:00

    嵌入式C語(yǔ)言C語(yǔ)言的區(qū)別

    嵌入式C語(yǔ)言C語(yǔ)言的區(qū)別:最常用的系統(tǒng)編程語(yǔ)言C
    發(fā)表于 10-27 06:52

    介紹一種嵌入式系統(tǒng)仿真方法

    /計(jì)數(shù)器等功能。本文介紹一種嵌入式系統(tǒng)仿真方法,通過(guò)一種特殊設(shè)計(jì)的指令集仿真器ISS將軟件調(diào)試器軟件Keil uVision2和硬件語(yǔ)言仿真
    發(fā)表于 11-08 06:16

    嵌入式平臺(tái)C語(yǔ)言實(shí)現(xiàn)二階濾波器的方法

    最近想從嵌入式平臺(tái)上用C語(yǔ)言實(shí)現(xiàn)二階濾波器,于是先從Matlab上驗(yàn)證二階濾波器公式,再編寫C語(yǔ)言來(lái)驗(yàn)證。算法移植(
    發(fā)表于 12-15 09:12

    嵌入式Linux存儲(chǔ)設(shè)備包含什么

    /NandFlash分區(qū))進(jìn)行自動(dòng)掛載。也實(shí)現(xiàn)模擬嵌入式Linux設(shè)備當(dāng)成U盤設(shè)備插入電腦,即通過(guò)USB數(shù)據(jù)線連接電腦,可指定存儲(chǔ)
    發(fā)表于 12-21 08:19

    一種在SoC嵌入式存儲(chǔ)器測(cè)試期間壓縮診斷信息方法介紹

    。個(gè)常用的方法是在收集所有故障位坐標(biāo)的基礎(chǔ)上生成故障位圖,并逐發(fā)送給測(cè)試人員。更為有效的是,遇到的故障可以檢索。本文介紹了一種在SoC嵌入式
    發(fā)表于 09-07 15:08

    一種嵌入式Linux與Windows JVM通信實(shí)現(xiàn)

    提出了一種在Windows 主機(jī)上運(yùn)用JAVA 虛擬機(jī)(JVM)技術(shù),與運(yùn)行嵌入式Linux 的嵌入式系統(tǒng)通信實(shí)現(xiàn)方法。介紹了
    發(fā)表于 08-13 09:42 ?17次下載

    嵌入式c語(yǔ)言編程(由淺入深)

    本內(nèi)容詳細(xì)介紹了嵌入式c語(yǔ)言編程的各項(xiàng)知識(shí),包括嵌入式c語(yǔ)言編程,
    發(fā)表于 11-02 14:37 ?0次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>c</b><b class='flag-5'>語(yǔ)言</b>編程(由淺入深)

    一種嵌入式手持設(shè)備的無(wú)線數(shù)據(jù)通信模塊擴(kuò)展方法

    文中針對(duì)嵌入式手持設(shè)備提出了一種擴(kuò)展低成本無(wú)線數(shù)據(jù)通信模塊的方法。通過(guò)對(duì)基于ARM技術(shù)的
    發(fā)表于 04-18 14:12 ?6次下載

    用于嵌入式系統(tǒng)的傅立葉變換的C語(yǔ)言實(shí)現(xiàn)方法

    都會(huì)和傅立葉變換打交道。在以下的文章中,我給出一種傅里葉變換的C語(yǔ)言實(shí)現(xiàn)方法(參考了C常用算法集),可以
    發(fā)表于 05-26 09:33 ?1902次閱讀
    可<b class='flag-5'>用于</b><b class='flag-5'>嵌入式</b>系統(tǒng)的傅立葉變換的<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言實(shí)現(xiàn)</b><b class='flag-5'>方法</b>

    用于嵌入式系統(tǒng)中的無(wú)線通信方法

    用于嵌入式系統(tǒng)中的無(wú)線通信方法(嵌入式開發(fā)需要專門的軟件和硬件設(shè)備嗎?)-該文檔為
    發(fā)表于 07-30 09:24 ?9次下載
    <b class='flag-5'>用于</b><b class='flag-5'>嵌入式</b>系統(tǒng)中的無(wú)線<b class='flag-5'>通信</b><b class='flag-5'>方法</b>

    標(biāo)準(zhǔn)c語(yǔ)言嵌入式,嵌入式C語(yǔ)言C語(yǔ)言的區(qū)別

    嵌入式C語(yǔ)言C語(yǔ)言的區(qū)別:最常用的系統(tǒng)編程語(yǔ)言C
    發(fā)表于 10-20 14:06 ?6次下載
    標(biāo)準(zhǔn)<b class='flag-5'>c</b><b class='flag-5'>語(yǔ)言</b>與<b class='flag-5'>嵌入式</b>,<b class='flag-5'>嵌入式</b><b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>與<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>的區(qū)別

    C語(yǔ)言嵌入式培訓(xùn) 嵌入式C語(yǔ)言程序設(shè)計(jì)基礎(chǔ)

      學(xué)習(xí)嵌入式的基礎(chǔ)語(yǔ)言C語(yǔ)言,因此先掌握C語(yǔ)言對(duì)于后續(xù)
    發(fā)表于 11-03 21:06 ?32次下載
    <b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b><b class='flag-5'>嵌入式</b>培訓(xùn)  <b class='flag-5'>嵌入式</b><b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>程序設(shè)計(jì)基礎(chǔ)