簡體   English   中英

是否可以將具有延遲功能的結構數組聲明為某些元素

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM