新員工一口氣寫完了這些C語言例子,領導給他轉正了!

一口Linux發表於2024-08-17

持續更新中...

很多想從事嵌入式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可能不在同一次讀取到的幀資料中。

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,

一文帶你掌握Linux字元裝置架構

2. 透過等待佇列實現讀阻塞

手把手教Linux驅動9-等待佇列waitq

3. 編寫一箇中斷處理函式,包含裝置樹

4. 實現1箇中斷底半部(workqueue)

5. 基於核心定時器timer_list,實現定時1s執行某個函式

【粉絲問答20】核心定時器使用及其他時間操作

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. 儀器

邏輯分析儀、示波器、穩壓電源、頻譜儀、萬用表

電烙鐵

相關文章