Dingo (14.06.2019 06:24 - 06:33, просмотров: 2643)
Хочу по Си спросить: discard qualifier Есть функция вида bool ntp_ge( ntptime_t op1, ntptime_t op2) // operator >=
При попытке переписать к виду bool ntp_ge( ntptime_t* op1, ntptime_t* op2) // operator >=
выдаёт варнинги на discard qualifier, в моём случае volatile. И функция не работает, как ожидается при использовании для опроса в цикле, пока не будет достигнуто заданное время.
wpoint = ntp_add( wpoint, SystemTime );
while( ntp_ge( wpoint, SystemTime) ) {
__NOP();
}
Я понимаю, что при передаче по значению будь там хоть константа, результат не изменится, потому как передаётся копия. Я не вполне понимаю, почему при работе с переменной
volatile ntptime_t SystemTime; и передаче значения по ссылке оптимизатор( -Os ) забывает перечитать значение по ссылке в цикле, хотя переменная определена в этом же файле. Писать отдельно функцию для volatile-значений? "Не по фен-шую" это. Передавать как volatile ntptime_t* p_ntp пробовал - тоже не перечитывает на итерациях.
Ну или как в Makefile задать отличный от других файлов уровень оптимизации для одного из файлов проекта?