作者greenlinux (GreenLinux)
看板LinuxDev
標題[問題] 請教在Driver這兩種宣告的方式有何好壞處
時間Thu Dec 5 00:46:17 2013
請教各位:
像以下的程式架構:
#include xxx.h
..............
static int data[1000];
void get_data()
{
for (i=0; i<1000;i++)
data[i] = some_process();
}
void save_data(int status)
{
save(data);
}
int interrupt_will_do()
{
get_data();
save_data(Now_Status);
}
data[1000]這個 matrix 會一直在get_data()更新然後做save_data()等處理
這樣的話, (1)到底data[]像以上的方式宣告在driver的一開始較好(因為這樣
只需要宣告一次), 還是
(2)每次進入get_data()再宣告,然後將data[]的pointer傳給save_data()較好??
或是(3) 在driver code一開始用 struct 的方式宣告, 然後在 get_data()
及 save_data 以 some_struct.data[] 來處理較好????
謝謝各位的指導..
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 123.204.202.188
推 yvb:(2) 如果 data 不是 static, 那就要注意是否會發生 12/07 01:42
→ yvb: C_and_CPP 置底十三誡之第5誡或第6誡之狀況. 12/07 01:43
→ yvb:如果是 static, 感覺沒太大差別, 只是 variable scope 問題. 12/07 01:45
→ yvb:若要考慮未來可能多個instances,那(3)或許是較佳選項, 12/07 01:46
→ yvb: 但可能會是 some_struct_pointer->data[] ? 12/07 01:48
→ greenlinux:To yvb: 謝謝你的指導 12/07 14:33
推 Bode123:2 作法有問題 離開後區域變數值就被其他東西改了 12/13 16:59
→ Bode123:1跟3不差不多意思吧 我覺得1 3兩個都可 12/13 17:01
→ Bode123:但要注意是否需要LOCK一下 12/13 17:02
→ leolarrel:要考慮到,driver是在kernel 的環境執行,stack 大小不是 12/21 11:38
→ leolarrel:無限制的 12/21 11:39