新員工一口氣寫完了這些C語言例子,領(lǐng)導(dǎo)給他轉(zhuǎn)正了!
持續(xù)更新中...
很多想從事嵌入式Linux開發(fā)的老鐵問一口君,有沒有快速提升自己編程水平的小例子?
一口君根據(jù)自己多年工作經(jīng)驗,整理了一些基于Linux的c語言的非常實用的小例子,
這些例子在嵌入式開發(fā)工作中,或多或少都會用到。
看看你們會做多少?
一、基礎(chǔ)C語言
1. 排序算法
給指定數(shù)組排序,可以是任意一種排序算法,比如冒泡排序
函數(shù)定義如下,
bubble_sort(char dest[],char src[],int len)
2. 將一個unsigned char array[]數(shù)組元素實現(xiàn)bit位逆序
比如:array[0] = 0x17(0001 0111),轉(zhuǎn)換后array[0] = 0xe8(1110 1000)
函數(shù)定義如下:
int reverse(unsigned char dest[],unsigned char src[],int len)
3. 將一個unsigned int array[]數(shù)組元素實現(xiàn)字節(jié)序轉(zhuǎn)換
比如array[0] = 0x12345678 ,轉(zhuǎn)換后array[0] = 0x78563412
函數(shù)定義如下:
myhtol(int dest[],int src[],int len)
4. 將一個unsigned char array[]數(shù)組,每一個字節(jié),轉(zhuǎn)換為二進制,每一個bit占一個字節(jié),將結(jié)果存儲到新的數(shù)組中,同時也可以實現(xiàn)將這新的數(shù)組還原
比如array[0] = 0x17 (0001 0111) array[1] = 0x32 (0011 0010)
新的數(shù)組dest[0] ~dest15] 為 0 ,0,0,1,0,1,1,1, 0,0,1,1,1,0,0,1,0
函數(shù)定義如下:
字節(jié)數(shù)組轉(zhuǎn)為bit數(shù)組
int Hex2bit(unsigned char dest[],unsigned char src[],int len)
返回值為新的bit數(shù)組的有效元素個數(shù)
bit數(shù)組還原為Byte數(shù)組
int bit2Hex(unsigned char dest[],unsigned char src[],int len)
返回值為還原后的Byte數(shù)組的有效元素個數(shù)
5. 幀格式轉(zhuǎn)換
將一個char數(shù)組,所有的7e 轉(zhuǎn)成 7d 5e ,7d轉(zhuǎn)成7d 5d,并能還原
二、Linux系統(tǒng)編程
1. 文件I/O(open、read、write、lseek)
1) 打開一個文件,如果不存在則創(chuàng)建
2)復(fù)制文件為指定文件名
3)讀取指定文件,每隔2個字節(jié),提取2個字節(jié),并將結(jié)果存儲到指定文件
4)修改某個文件指定行的內(nèi)容,將當前日期更新到指定位置
#define VERSION "2024-6-21"
2. 串口
1)以制定的配置打開指定串口,從串口讀取一定長度的數(shù)據(jù),并將該數(shù)據(jù)直接從串口寫回
《【粉絲問答8】用C語言在Linux下實現(xiàn)CC2530上位機-1》
2)從串口數(shù)據(jù)中解析出有效數(shù)據(jù)(有點難)
假定需要從串口接收到的數(shù)據(jù)幀格式如下:
7e xx xx xx xx xx xx xx 7e
7e中間位有效數(shù)據(jù)區(qū),要求能夠從串口數(shù)據(jù)中提取出有效數(shù)據(jù)
注意:從串口讀取的數(shù)據(jù)并不是規(guī)則的,7e可能在一組數(shù)據(jù)開頭、中間、結(jié)尾,并且一對7e可能不在同一次讀取到的幀數(shù)據(jù)中。
3. 進程
1)創(chuàng)建子進程,并分別在創(chuàng)建前后打開同一個文件,分析父子進程同時操作該文件之間的影響。
2)編寫一個守護進程
3)通過管道(無名管道和有名管道),實現(xiàn)進程間通信
4. 線程
1) 創(chuàng)建2個線程,一個線程向全局數(shù)組寫數(shù)據(jù)(數(shù)組盡量大一些),一個線程打印該全局數(shù)組,分析結(jié)果
2)互斥鎖使用
創(chuàng)建2個線程,通過互斥鎖實現(xiàn)互斥訪問某個指定串口
3) 條件變量
創(chuàng)建2個線程,線程2的執(zhí)行必須是線程1在完成某個動作之后(比如sleep5秒之后)才可以執(zhí)行。
5. 信號
給信號SIGINT注冊指定回調(diào)函數(shù),
三、網(wǎng)絡(luò)
1. 編寫1個C/S架構(gòu)的udp/tcp并發(fā)服務(wù)器
服務(wù)器收到任意客戶端數(shù)據(jù),都直接回傳給該客戶端
2. 基于socket(tcp/udp)實現(xiàn)網(wǎng)絡(luò)文件傳輸
3. 基于socket(tcp/udp)實現(xiàn)一個建議信令傳輸協(xié)議
typedef struct _protocol_s{
int cmd;
…………
char data[10];
}PROTOCOL_S;
4. 讀取當前系統(tǒng)所有網(wǎng)口的信息(name、ip)
cat /proc/net/dev
5. 修改網(wǎng)卡ip地址
不許用system()
四、驅(qū)動
1. 字符設(shè)備
編寫一個最簡單的字符設(shè)備驅(qū)動和應(yīng)用程序,包含:read/write/ioctl,
2. 通過等待隊列實現(xiàn)讀阻塞
3. 編寫一個中斷處理函數(shù),包含設(shè)備樹
4. 實現(xiàn)1個中斷底半部(workqueue)
5. 基于內(nèi)核定時器timer_list,實現(xiàn)定時1s執(zhí)行某個函數(shù)
6. 使用內(nèi)核信號量
五、工具篇
1. 版本管理
git
cmder
2. 安卓設(shè)備
adb、scrcpy
《詳解如何將 Android 手機投屏在 Ubuntu 上》
3. 文本
source insight、vim、16進制分析工具、beyond compare
4. 畫圖工具
viso、edraw、
5. 串口工具
xshell、secure CRT、XCOM
6. 網(wǎng)絡(luò)
- 工具
wireshark,netassit,tcpdump
- 命令
iperf、ping、tftp、ftp、ifcpnfig、ipconfig
7. 文件傳輸
- 通常開發(fā)板和windows傳輸文件
tftp、adb、rz、sz
- windows之間傳輸文件
飛秋、ftp、windows文件共享
8. 音頻
aplay、arecord、ffplay
camera
v4l2-ctl、media-ctl -p、ffplay
9. i2c
i2cdetect、i2cdump、i2cget、i2cset、i2ctransfer
10. 儀器
邏輯分析儀、示波器、穩(wěn)壓電源、頻譜儀、萬用表
電烙鐵

浙公網(wǎng)安備 33010602011771號