ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
21 января
1487916 Топик полностью
mse homjak (31.12.2024 17:18, просмотров: 64) ответил Nikolay_Po на Я как-то озаботился, пару раз посидел и глубоко подумал. И всё понял. У меня никаких разногласий с компиляторами насчёт volatile нет. Код большого конечного автомата, что я правил, на 6000 строк (ну, так было удобно его автору), содержит всего штук 5 таких переменных - когда обращается напрямую к данным, обновляемым в прерываниях.
Недавно подымал тему с CH32V303. У которого внешняя шина глючит на нечотные полуслова. Разрешилось только так, пришлось ваять функцыю на чтение памяти: 
uint16_t readExternalMem(uint16_t* pointer)
{
	volatile _32_bit_composition_ temp;
	if(((uint32_t)pointer&3)!=0)
	{
		temp._32_bit_data_=*((uint32_t*)(pointer-1));
		return temp._16_bit_data_[1];
	}
	else
	{
		return *pointer;
	}
}

Без volatile компилер приводил её к банальному чтению.