作者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
1F:推 yvb:(2) 如果 data 不是 static, 那就要注意是否会发生 12/07 01:42
2F:→ yvb: C_and_CPP 置底十三诫之第5诫或第6诫之状况. 12/07 01:43
3F:→ yvb:如果是 static, 感觉没太大差别, 只是 variable scope 问题. 12/07 01:45
4F:→ yvb:若要考虑未来可能多个instances,那(3)或许是较佳选项, 12/07 01:46
5F:→ yvb: 但可能会是 some_struct_pointer->data[] ? 12/07 01:48
6F:→ greenlinux:To yvb: 谢谢你的指导 12/07 14:33
7F:推 Bode123:2 作法有问题 离开後区域变数值就被其他东西改了 12/13 16:59
8F:→ Bode123:1跟3不差不多意思吧 我觉得1 3两个都可 12/13 17:01
9F:→ Bode123:但要注意是否需要LOCK一下 12/13 17:02
10F:→ leolarrel:要考虑到,driver是在kernel 的环境执行,stack 大小不是 12/21 11:38
11F:→ leolarrel:无限制的 12/21 11:39