Предупреждение AVG-GCC
- Войдите на сайт для отправки комментариев
Сб, 25/06/2022 - 19:19
Прошу помочь/подсказать. Осваиваю avr-gcc.
Простая функция и все работает =
// Готовность UART приемника , если = 0 ТО Не ГОТОВ !! если <> 0 ТО ГОТОВ !!
uint8_t Uart0_readyRXC()
{
uint8_t mb;
#if defined (__AVR_ATmega328P__) || defined (__AVR_ATmega328__)
mb = UCSR0A & 0b10000000;
#endif
return mb;
}
НО !! при компиляции с ключем -Wall выдает следующее предупреждение =
uart.c:39:17: warning: array subscript 0 is outside array bounds of 'volatile uint8_t[0]' {aka 'volatile unsigned char[]'} [-Warray-bounds]
39 | mb = UCSR0A & 0b10000000;
...........................^
Что делать ??
Выложить файл полностью. Посмотрев как это делают люди.
А код-то где?
mb = UCSR0A & 0b10000000;
странная строка на фоне других - что у этого бита 0b10000000 нет имени ? Смысл писать волшебные числа ?
Попробую выложить. Хотя код функции привел.
Просто отлаживаю библиотечки свои 2 шт + тест и того всего 6 файлов с заголовками, да и файл батника для компиляции.
Все работает, все функции проверены, делают, что я хочу, но вот попробовал компилировать с опцией -Wall
И вывалились сообщения - типа не нравиться.
Вот сама библиотечка, замечания все к ней.
Вот файл батника для компиляции
А вот сообщения компилятора
Тест простой, не думаю что это влияет на сообщения =
Наверно все выложить - проще архивом или еще как ?
Завтра посмотрю, если раньше никто не подскажет.
Посмотреть на определение UCSR0A мозгов не хватило, конечно же.
второй раз за последнее время не вижу подключение опций компиляции в теле программы, что так?
строчки 7 и 16 последнего кода. Переменная nst - это неинициализированнй указатель на строку. Ну или как назвал это компилятор - массив нулевого размера. Когда вы пытаетесь ему что-то присвоить - происходит выход за границу, о чем вам компилятор и говорит:
А то что ошибки указывают на строчки в библиотеке - наверно потому что вы пытаетесь эту несуществующую строку передать по UARt
строчки 7 и 16 последнего кода .
Переменная nst - это не инициализированнй указатель на строку.....
Спасибо. Да это ошибка. НО Это не помогло. Я пошел далее и убрал вообще все. Оставил одну функцию и вызов ее. Проблема осталось. Смотрите это код, всего одна функция м вызов =
Всего одна строка батника для компиляции
и Вот список ПРЕДУПРЕЖДЕНИЙ ! При использовании опции -Wall
Как решить это я не понимаю.
Посмотреть на определение UCSR0A мозгов не хватило, конечно же.
Пошел Еще ДАЛЬШЕ. Сменил версию пакета AVR-GCC.
При использовании пакета из WbnAvr2010 – ПРЕДУПРЕЖДЕНИЙ НЕТ !! сообщает о версии = 4.3.3
При использовании пакета из Arduino вер 1.8.19 - – ПРЕДУПРЕЖДЕНИЙ НЕТ !! сообщает о версии = 7.3.0
У меня стоял пакет версии AVR-GCC 12.1.0 x64 = avr-gcc-12.1.0-x64-windows = якобы скаченного с github.com вот такая вот фигня. Сообщает о версии = 12.1.0
Кому верить и как с этим жить не понятно.
Т. Е. ПРОБЛЕМУ ПРЕДУПРЕЖДЕНИЙ СНИМАЮ. НЕТ ЕЕ. ЕСТЬ ПРОБЛЕМА в самом компилятора или его версий.
Решил тут вот освоить avr-gcc, хотя 5 лет писал и пишу на MP. Но для общество я изгой. Для общения с обществом решил вот писать на avr-gcc. И вот первые 2 дня на avr-gcc и такие вот выкрутасы. Главное нет определенности, придется учиться жить с неопределенными правилами.
Спасибо ВСЕМ
Посмотреть на определение UCSR0A мозгов не хватило, конечно же.
Не понял.
UCSR0A определен вот так = #define UCSR0A _SFR_MEM8(0xC0) - это адрес регистра и могу его использовать с таким именем.
Это то, о чём я хотел сказать. Старайтесь локализировать ошибку и минимизировать код для её проверки. Т.е., коль вы просите, то должны всё выложить на блюдечке. Что бы любой желающий, без лишних телодвижений, смог проверить у себя.
avr-gcc -mmcu=atmega328p -Wall -Os -c -o test.o test.c
avr-gcc (GCC) 7.3.0
Посмотреть на определение _SFR_MEM8 мозгов не хватило, конечно же.