Сложность чтения нестабильной памятиC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Сложность чтения нестабильной памяти

Сообщение Anonymous »

У меня есть код, который работал хорошо при составлении с GCC, но не работает правильно при составлении с Clang. Я отслеживал проблему до чтения нестабильной памяти (на микроконтроллере). Я обнаружил, что вступил в сборку, что память, связанная с PMA_ADDRESS , читается в регистр, но значения, установленные в регистре, никогда не используются. Таким образом, harder_setup_packet никогда не называется предположительно, потому что оптимизатор определил, что буфер никогда не изменится. Сделав Buffer_out в изменчивую uint8_t*, код работает правильно. Но я не понимаю, почему в этом случае это должно быть нестабильным. Я бы подумал, что одного волатильного будет достаточно, чтобы убедить компилятора, что буфер стоит посмотреть. Мне интересно, какова моя логическая ошибка в следующем коде: < /p>
void read_pma(uint8_t byte_count, volatile uint16_t * pma_address, uint8_t *buffer_out) {
int count_received_16 = (byte_count + 1) >> 1;
for(int i=0; ibuffer[0].EP_RX, buffer);
handle_setup_packet(reinterpret_cast(buffer));
}


Подробнее здесь: https://stackoverflow.com/questions/797 ... ile-memory
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»