Все что позже, поставляеться каким-то набором файлов, и я незнаю, как его установить.
ну если вы работаете в студии, то проблемы, конечно, могут быть. я пользуюсь Eclipse и особо не горюю...
можете попробовать, предварительно заархивировав папку с уже установленной версией avr-gcc, скачать более свежую версию и тупо перезалить содержимое папок - их названия одинаковы, файлы предыдущей версии будут затерты новыми... если не понравится - вытрете все вобще и из архива восстановите прежнюю версию. вся инсталляция заключается только в распаковке архива и правильном прописывании путей в PATH...
Добавлено after 1 minute 43 seconds:
Пока_без_кота писал(а):
conflicting types for 'SendStr_P'
это скорее всего из-за того, что прототип и реализация у вас не одинаковые. небось, в прототипе-то забыли const дописать...
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
// Парсинг строки ================== char Parsing(char *string, unsigned int parsing_delay)// На входе указатель на 1 символ строки, и время парсинга строки { unsigned char temp;
parsing_result = 0; // Начинаем парсинг с обнуления успешного парсинга/устранения ошибки парсинга parsing_pointer = string; // Копируем указатель на 1 сивол строки, которую будем парсить в глобальную переменную temp = UDR; // Читаем приемник, чтобы сбросить флаг прерывания от всякого мусора, который там был до этого UCSRB |= 1<<RXCIE; // Разрешаем прерывание по приходу байта - парсинг начался
while(parsing_result != 1) // Ждем успешного окончания, либо ошибки парсинга { _delay_ms(1); parsing_delay--; if (parsing_delay == 0) // Если время парсинга вышло { UCSRB &= ~(1<<RXCIE); // Запрещаем прерывание по приходу байта, чтобы не отвлекаться на всякую дрянь return 2; // И вываливаемся из цикла с ошибкой парсинга } } return 1; }
Прототип обявлен соответственно:
Код:
char Parsing(char *string, unsigned int parsing_delay);
Имею warning: passing argument 1 of 'Parsing' discards 'const' qualifier from pointer target type [enabled by default] Вроде все понятно, как и в предыдущий раз добавляю const в прототип, получая
Код:
char Parsing(const char *string, unsigned int parsing_delay);
и в саму функцию (код не привожу, понятно что меняеться только в "шапке"). И получаю уже другой warning: assignment discards 'const' qualifier from pointer target type [enabled by default] на строчке функции парсинга
Код:
parsing_pointer = string;
Как побороть этот порочный круг ? П.С. Как всегда, написал, и только тогда понял как. Надо переменную обявить как
Код:
const char *volatile parsing_pointer;
Верно ? Просто для меня это как-то нелогично, к переменной приписывать атрибут const
Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.
Логично. все указатели, которые "смотрят" во flash, должны быть указателями на константу.
const char * var; надо читать задом наперед: [переменная] var - это указатель на символ-константу.
то есть не переменная константа, а указатель на константу. сам указатель вполне себе не константный.
если вам приспичит иметь константный указатель, то он должен быть записан иначе, вам уже объясняли: char * const var; - читаем задом наперед: var - это неизменяемый (т.е. константный) указатель на char
Си - странный язык... чтобы понять некоторые записи, надо смотреть на них справа налево, хотя почти все читается слева направо...
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Си - странный язык... чтобы понять некоторые записи, надо смотреть на них справа налево, хотя почти все читается слева направо...
Ничего странного, всё предельно просто. То, что слева от звёздочки - относится к типу на указываемый объект, всё что справа от неё - к самому указателю.
привыкнуть можно, конечно, но вот что прямо-таки предельно просто, не соглашусь. если левее идентификатора переменной находится две звездочки, и между ними квалификатор[ы], то уже понять, что относится к левой, а что к правой звездочке уже не так элементарно... ну да ладно, это я уже брюзжу...
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Заголовок сообщения: Re: WinAvr в вопросах и ответах
Добавлено: Чт окт 19, 2017 07:34:45
Модератор
Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4510 Откуда: Планета Земля
Рейтинг сообщения:0 Медали: 1
Пока_без_кота писал(а):
Прошу прощения, но я буквально скопировал buffer_max из дефайна в размерность буффера, и все равно ошибка "имеет место быть". Я не понимаю
Вы меня не поняли. Заменять нужно не buffer_max, а то, на что это меняется в программе. Вы, по всей видимости, с трудом представляете, что такое define. На самом деле, всё очень просто. define - это обычная подмена одного текста, на другой. Не более того. Посмотрите, что и на что заменяется :
Код:
Заменяется Вот это На это | | | | | | #define buffer_max 20; // Размерность буффера
и сами вручную замените у себя в программе. И сразу увидите ошибку. Мне не хочется Вам сразу на неё указывать. Хотелось бы, чтобы Вы её сами обнаружили, дабы в дальнейшем в неё меньше вляпываться.
Я действительно не понимаю чего я не понимаю. Я понимаю, что дефайн, это просто змена текста. Но я не понимаю, почему, если я его определил, эта замена не хочет осуществляться.
Не сердитесь)) Я думаю, мне еще представиться случай подумать В свое опрадание только скажу, что я воспринимал эту точку с запятой не как обязательную конструкцию языка Си, а как символ начала коментария (сказываеться опыт программирования на 3 ассемблерах, без единого ЯВУ).
точка с запятой в макросе - это еще фигня на постном масле... а вот древние версии avr-gcc подтягивали туда и комментарии в стиле // - вот где был кошмар на улицу Вязов! можете даже поискать в гугле - полно советов в строке макросов не делать комментариев или делать их в /* таком виде */... даже я такие советы давал лет несколько тому назад
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 31
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения