Мне интересно, как поведение памяти / переменных в следующем коде.По сути, я добавляю epd_tx_buffer в массив в epd_driver_state с помощью epd_power_on ().
Затем эти буферы используются / асинхронно используются через механизм, управляемый событиями.Мое беспокойство / что я хочу знать, будет ли содержимое области памяти, указанной "uint8_t * buffer", постоянным или возможно, что оно может быть перезаписано.По завершении epd_power_on будет выполняться другой код до тех пор, пока асинхронное событие не займет буфер.
struct epd_tx_buffer {
uint8_t hasCmd;
uint8_t * buffer;
uint16_t bufferLen;
uint8_t wait_ms;
};
static struct epd_driver_state {
uint8_t cursor;
uint8_t length;
struct epd_tx_buffer buff[256];
bool isRunning;
} epd_driver_state;
static void epd_power_on(void){
addToSPIQueueCommandData( ( uint8_t[] ) { POWER_ON }, 1 );
addToSPIQueueCommandData( ( uint8_t[] ) { PANEL_SETTING, 0x2F }, 2 );
addToSPIQueueCommandData( ( uint8_t[] ) { PLL_CONTROL, 0x3A }, 2 );
addToSPIQueueCommandData( ( uint8_t[] ) { POWER_SETTING, 0x03, 0x00, 0x2B, 0x2B, 0x09 }, 6 );
addToSPIQueueCommandData( ( uint8_t[] ) { BOOSTER_SOFT_START, 0x07, 0x07, 0x17 }, 4);
addToSPIQueueCommandData( ( uint8_t[] ) { VCM_DC_SETTING_REGISTER, 0x00 }, 2 );
addToSPIQueueCommandData( ( uint8_t[] ) { VCOM_AND_DATA_INTERVAL_SETTING, 0x47 }, 2 );
}
bool addToSPIQueueCommandData(uint8_t * buffer, uint16_t bufferLen)
{
if( epd_driver_state.length >= 255 ) return false;
epd_driver_state.buff[ epd_driver_state.length ].hasCmd = 1;
epd_driver_state.buff[ epd_driver_state.length ].buffer = buffer;
epd_driver_state.buff[ epd_driver_state.length ].bufferLen = bufferLen;
epd_driver_state.length++;
return true;
}
Некоторые объяснения будут высоко оценены!