欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

C和Python的串口通信協(xié)議小技巧-創(chuàng)新互聯(lián)

文章目錄
    • C
      • 取 u8
      • 從 u8 數(shù)組取數(shù)據(jù)
      • 使用聯(lián)合體 union
    • Python
      • dict 功能幀
      • struct 包

由于進(jìn)行串口通信的時(shí)候,只能傳遞 unsigned char(u8) 字節(jié)型的數(shù)據(jù),所以就會(huì)有一些要將幾個(gè) u8 合并或者將 (unsigned int)u32 拆成4個(gè) u8 的需求。
在此做一些總結(jié)歸納供大家參考,需要有一定嵌入式串口開(kāi)發(fā)經(jīng)驗(yàn)。

在潞城等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供做網(wǎng)站、成都網(wǎng)站設(shè)計(jì) 網(wǎng)站設(shè)計(jì)制作按需定制網(wǎng)站,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),成都全網(wǎng)營(yíng)銷推廣,成都外貿(mào)網(wǎng)站建設(shè)公司,潞城網(wǎng)站建設(shè)費(fèi)用合理。C
#define u32 unsigned int 
#define s32 int 
#define u16 unsigned short 
#define s16 short
#define u8  unsigned char 
#define s8  char
取 u8
#define BYTE0(dwTemp) (*((char *)(&dwTemp)))
#define BYTE1(dwTemp) (*((char *)(&dwTemp) + 1))
#define BYTE2(dwTemp) (*((char *)(&dwTemp) + 2))
#define BYTE3(dwTemp) (*((char *)(&dwTemp) + 3))

例子:

u32 temp_data_32;
u8 buffer[4];

buffer[0] = BYTE0[temp_data_32];
buffer[1] = BYTE1[temp_data_32];
buffer[2] = BYTE2[temp_data_32];
buffer[3] = BYTE3[temp_data_32];
從 u8 數(shù)組取數(shù)據(jù)
u8 data[num];	// 假設(shè)你所需的數(shù)據(jù)大量存在data數(shù)組中

// 取 8bit
u8 data_u8[num];
data_u8[0] = *(data);
data_u8[1] = *(data + 1);
...

// 取 16bit
u16 data_u16[num];
data_u16[0] = *((u16 *)(data));
data_u16[1] = *((u16 *)(data + 2));
data_u16[2] = *((u16 *)(data + 4));
...

s16 data_s16[num];
data_s16[0] = (*((s16 *)(data))) / 1.0f;
data_s16[1] = (*((s16 *)(data + 2))) / 1.0f;
data_s16[2] = (*((s16 *)(data + 4))) / 1.0f;
...

// 取 32bit
s32 data_s32[num];
data_s32[0] = *((s32 *)(data));
data_s32[1] = *((s32 *)(data + 4));
data_s32[2] = *((s32 *)(data + 8));
使用聯(lián)合體 union

使用聯(lián)合體將float型數(shù)據(jù)拆分成字節(jié)數(shù)組
首先定義一個(gè)聯(lián)合體

typedef union{float data;
	uint8_t data8[4];
}data_u;

這個(gè)聯(lián)合體中有兩個(gè)成員,一個(gè)是32位的float數(shù)據(jù)data,另一個(gè)同樣是占據(jù)了32位字長(zhǎng)的字節(jié)數(shù)組data8,根據(jù)聯(lián)合體的性質(zhì),這兩個(gè)成員所在的內(nèi)存位置是一樣的,也就是說(shuō),改變其中任何一個(gè)成員的值,另一個(gè)也會(huì)被改變.利用這個(gè)性質(zhì),我們就可以實(shí)現(xiàn)float與字節(jié)數(shù)據(jù)的互換。

data_u _temp; // 聲明一個(gè)聯(lián)合體實(shí)例,使用它將待發(fā)送數(shù)據(jù)轉(zhuǎn)換為字節(jié)數(shù)組
uint8_t data_to_send[100]; // 待發(fā)送的字節(jié)數(shù)組

data_to_send[_cnt++]=0xAA;
data_to_send[_cnt++]=0xBB;
		
// 將要發(fā)送的數(shù)據(jù)賦值給聯(lián)合體的float成員
// 相應(yīng)的就能更改字節(jié)數(shù)組成員的值
_temp.data = imu_data.yaw;
data_to_send[_cnt++]=_temp.data8[0];
data_to_send[_cnt++]=_temp.data8[1];
data_to_send[_cnt++]=_temp.data8[2];
data_to_send[_cnt++]=_temp.data8[3]; // 最高位

_temp.data = imu_data.pit;
data_to_send[_cnt++]=_temp.data8[0];
data_to_send[_cnt++]=_temp.data8[1];
data_to_send[_cnt++]=_temp.data8[2];
data_to_send[_cnt++]=_temp.data8[3]; // 最高位

_temp.data = imu_data.rol;
data_to_send[_cnt++]=_temp.data8[0];
data_to_send[_cnt++]=_temp.data8[1];
data_to_send[_cnt++]=_temp.data8[2];
data_to_send[_cnt++]=_temp.data8[3]; // 最高位

接收端同理,只要將接收到的數(shù)據(jù)逐個(gè)存入聯(lián)合體的 data8[] 數(shù)組中就好,然后調(diào)用data進(jìn)行使用。

Python dict 功能幀

可以巧妙使用 Python 中的 dict 數(shù)據(jù)類型,以此來(lái)記入功能幀。

param_dic = {'speed': 0x01, 'voltage': 0x02, 'read': 0x03}
struct 包

python struct
參考上面的官方文檔,使用就好了
列舉一些注意點(diǎn):

  1. 注意本機(jī)字節(jié)順序,可用sys.byteorder來(lái)檢查你的系統(tǒng)字節(jié)順序
  2. 解包(unpack)后,低字節(jié)在前,高字節(jié)在后
  3. 由于串口傳遞的是無(wú)符號(hào)字節(jié)型數(shù)據(jù),若接收的變量是有符號(hào)類型如h格式,將自動(dòng)進(jìn)行如下操作。在C語(yǔ)言端的處理要注意
    eg.
import struct

data = struct.pack('BBBBBBBB', 0xEA, 0xFF, 0x1E, 0x00, 0x64, 0x60, 0xEA, 0xFF)	# 打包
print(data)
data = struct.unpack('
b'\xea\xff\x1e\x00d`\xea\xff'
-22
30
65514

data[0] = eaff = ffea = 65514-65536 = - 22
data[1] = 1e00 = 001e = 30
data[4] = eaff = ffea = 65514
因?yàn)橛蟹?hào)類型,最高位表示正負(fù)。

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

本文標(biāo)題:C和Python的串口通信協(xié)議小技巧-創(chuàng)新互聯(lián)
標(biāo)題鏈接:http://aaarwkj.com/article42/jcdhc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計(jì)、全網(wǎng)營(yíng)銷推廣、網(wǎng)站收錄動(dòng)態(tài)網(wǎng)站、App開(kāi)發(fā)定制網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

人妖伪娘在线观看一区二区三区| 亚洲女优中文字幕在线免费| 国产亚洲精品视频免费| 一区二区精品人妻av| 六月综合激情丁香婷婷色| 国产高清不卡午夜福利| 色婷婷精品二区久久蜜臀av| 日韩欧美国产精品专区| 日韩av在线免费在线观看| 亚洲中文字幕第三页在线观看| 午夜福利在线视频观看| 色哟国产传媒视频在线观看| 98精品熟女亚洲av| 欧美日韩黄色的三级视频| av成人综合在线资源站| 91青青草原免费观看| 国产亚洲美女在线视频视频| 亚洲欧美日韩1区2区| 久久香蕉精品国产亚洲av| 日韩最新视频一区二区三| 日韩美女av在线播放| 日韩精品一区二区91| 国产一区二区三区不卡视频| 男人天堂av网在线观看| 精品国产18禁99久久久久久| 日韩高清av不卡一区二区三区| 日韩视频在线不卡观看| 爱我久久视频网免费视频| 欧美日韩国产这里只有精品| 国产91白丝在线观看| 双高干文男女主都很强| 亚洲中文字幕乱码丝袜在线精品| 天堂av新版在线观看| 成人精品颜射少妇内射| 国产性做爰片免费网站| 国产传媒在线视频观看| 一区二区久久精品视频| 91亚洲国产成人久久| 亚洲国产中文日韩欧美在线| 亚洲精品黄色片中文字幕| 搡老女人老91妇女老熟女|