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

浙公網安備 33010602011771號