我一直無法獲得此代碼正常工作。 我的目標是顯示放置在LCD上的PROGMEM中的字符串。 指向這些字符串的數組也在PROGMEM中。 該函數被調用一個變量,該變量又被轉換爲讀取數組的索引號。 Ofcourse pgmspace.h包含在代碼中。Progmem中的數組錯誤下標?
我不斷收到的錯誤是: 數組下標具有類型「字符」 [-Wchar-標] - 初始化時將整數指針沒有施放[默認啓用]
有人能指出我在這裏失蹤?
工作在AVR GCC代碼上,我的IDE是Eclipse。
const char wf0[] PROGMEM= "OFF ";
const char wf1[] PROGMEM= "SIN ";
const char wf2[] PROGMEM= "TRI ";
const char wf3[] PROGMEM= "S+T ";
const char wf4[] PROGMEM= "PUL ";
const char wf5[] PROGMEM= "P+S ";
const char wf6[] PROGMEM= "P+T ";
const char wf7[] PROGMEM= "P+ST";
const char wf8[] PROGMEM= "NOI ";
const char wf9[] PROGMEM= "N+S ";
const char wf10[] PROGMEM= "N+T ";
const char wf11[] PROGMEM= "NST ";
const char wf12[] PROGMEM= "N+P ";
const char wf13[] PROGMEM= "NPS ";
const char wf14[] PROGMEM= "NPT ";
const char wf15[] PROGMEM= "NPTS";
const char * const arrayWaveform[] PROGMEM= {wf0,wf1,wf2,wf3,wf4,wf5,wf6,wf7,wf8,wf9,wf10,wf11,wf12,wf13,wf14,wf15};
...
void showWaveform (char ctrlValue)
{
char hex = (ctrlValue & 0xf0)>>4;
char tempText[4];
char* data = pgm_read_byte(&arrayWaveform[hex]); // <<shows up both errors here
strcpy_P (tempText, data);
for (char x=0;x<4;x++)
{
char2LCD(tempText[x]); // <<shows up error: array subscript has type 'char'
}
}
我正在查看你的代碼。謝謝你指出的東西。做了一些小修改(temptext和tempText,初始化* pstr = 0)。它編譯好,但仍然給出奇怪的結果。這可能不需要處理你的代碼,但也許在我的代碼中的其他地方,其他類似的問題仍然在眼前。這一點也將一些數據放在progmem中,但不能正確編譯。可能是同樣的錯誤。我明天會研究這個。現在感謝! – user2371490
我的不好:我在'memcpy_P'的調用中忘記了pstr之前的'&'。這是因爲memcpy_P會加載一個指向PROGMEM的指針,所以我必須傳遞我想要加載指針的地址,即指向char *的指針。 – CAFxX