1. 程式人生 > 其它 >聊聊開發和設計的一些話題

聊聊開發和設計的一些話題

本次blog只講8個事情,主要包括核心、程序、規範等話題。

1. kernel編譯ko

kernel如何去編譯一個.ko檔案? 請看如下的Makefile

obj-m:=helloworld.o 
mymodule-objs:=module  
KDIR?=
default:
	make -C $(KDIR) SUBDIRS=$(PWD) modules  
clean:
	make -C $(KDIR) SUBDIRS=$(PWD) clean

 在make時刻只需要增加KDIR的引數傳遞即可,再補充靈魂-j999

make KDIR=/kernel/ -j999

2. epoll監聽檔案

可以說epoll大體上作為IO的監聽的主體,動不動來一個socket監聽,形成一個十萬級別的客戶端接入,但可以讓你頭疼在監聽一個GPIO,因為

GPIO你只能看電平value高低,看似沒用,其實不然,GPIO也有它的特性-中斷配置-EDGE,在這個裡面存在四個選項:

none,rising,falling,both

通常none,epoll是沒有反應的,當作普通檔案,說白了epoll是沒法監聽普通的檔案的。

3. shell註釋多行

這個shell註釋非常簡單,#oh my,即可,突然發現/**/更加舒服,但是shell也要多行註釋,搜了下發現: ' '

: '

’

記住,看到的間隙都是空格。

4. 程序間通訊

程序間可以實現多種的通訊方式,如訊息佇列(非必要不用,會爆倉),管道(很多時候不用),socket(經常用),共享記憶體(過於高階,不捨得用)等等,其實可以有一些活用,例如訊息佇列程序間提供執行緒使用,共享記憶體也如此。

5. git merge

當你開發master一個而已,不需要merge,當bugfix 需要開很多個branch,那麼經常性的merge很必要,merge master或者 merge bugfix 分支,merge更加體現修復問題的清晰,方便團隊開發。

6. 製作.so 檔案實現

#!/bin/sh
#add arm arm-linux-gnueabi-gcc
#arm-linux-gnueabi-gcc -fPIC -c socket.c
#arm-linux-gnueabi-gcc -fPIC -shared -o libsocket.so socket.o

gcc -fPIC -c socket.c
gcc -fPIC -shared -o libsocket.so socket.o
#cp libsocket.so /lib -fa
gcc main.c -o test -lsocket
echo "built done"

 -fPIC 作為製作動態庫.so的條件。

7. 程式設計規範守則細聊-杜絕更多if-else 或者 else

當你需要找一個電腦,電腦系統是linux的,執行快的。

此處存在三個條件,通常的情況如下:

if ( product == computer )
{
    if ( system == linux )
    {
        if ( speed == fast )
        {
        }
    }
}

 能寫兩行堅決不寫一行,show me the code ,  dont talk too much.

if ( product != computer )
{
    return -1;
}

if ( system != linux )
{
    return -1;
}

if (speed != fast )
{
    return -1;
}

 儘可能跳出來,讓別人debug更加容易,可讀性也強了,else到底去哪裡了。

8. 資料結構和介面實現

這樣的設計邏輯是在最近的開發應用上不斷練就的技能,作為開發設計不應該只coding,而不管設計。

好的code應該從結構一眼看到50%,才到介面實現。

例如存放一個學生的資訊:

1. 先定義一個結構體

struct student
{
    char name[32];
    int age;
    struct student *next;
};

 s1->s2->s3.....

2 定義介面

插入資料和刪除資料介面。