[英]Is it possible to declare array of structures with delays functions as some of the elements
我從制造商那里獲得了觸摸屏驅動程序的初始化結構。
struct ChipSetting ssd25xxcfgTable[]={
delay(300),
{2,0x01,0x00,0x00},
delay(100),
{2,0x06,0x19,0x0F},
{2,0x07,0x00,0xE0},
{2,0x08,0x00,0xE1},
{2,0x09,0x00,0xE2},
{2,0x0A,0x00,0xE3},
{2,0x0B,0x00,0xE4},
};
據我說,芯片設置的結構應該是:
struct Chipsetting
{
unsigned char reg; // register to be written
unsigned char len; // length of data
unsigned char msb; // data
unsigned char lsb;
};
我想使用strutcure對設備寄存器進行編程,如下所示。
for (index = 0; index < sizeof(ssd25xxcfgTable)/sizeof(ssd25xxcfgTable[0]); index++)
{
// command address of parameter parameter length
WriteReg(ssd25xxcfgTable[index].reg, &ssd25xxcfgTable[index].msb, ssd25xxcfgTable[index].len);
}
有可能這樣做嗎? 我需要根據結構中給定的元素順序調用延遲函數。 據我說,這是不可能的,但是需要知道是否有一些解決方法。 我想避免拆分for
循環。 而且我覺得上面的init結構更具可讀性。
據我了解您的問題,看來您實際上需要將延遲與Chipsetting值一起存儲,並在運行時調用它們:
struct ChipsettingWrite {
int delay;
struct Chipsetting setting;
};
struct ChipsettingWrite ssd25xxcfgTable[]={
{300, {2,0x01,0x00,0x00}},
{100, {2,0x06,0x19,0x0F}},
{0, {2,0x07,0x00,0xE0}},
{0, {2,0x08,0x00,0xE1}},
{0, {2,0x09,0x00,0xE2}},
{0, {2,0x0A,0x00,0xE3}},
{0, {2,0x0B,0x00,0xE4}},
};
我認為必須在某個地方存在一個可以寫入值的函數,因此您可以執行以下操作:
int NUMBER_OF_SETTINGS = sizeof(ssd25xxcfgTable)/sizeof(ssd25xxcfgTable[0]);
for (int i = 0; i < NUMBER_OF_SETTINGS; i++) {
if (ssd25xxcfgTable[i].delay > 0) {
delay(ssd25xxcfgTable[i].delay);
}
WriteReg(ssd25xxcfgTable[i].setting.reg, &ssd25xxcfgTable[i].setting.msb, ssd25xxcfgTable[i].setting.len);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.