Все что позже, поставляеться каким-то набором файлов, и я незнаю, как его установить.
ну если вы работаете в студии, то проблемы, конечно, могут быть. я пользуюсь 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
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Логично. все указатели, которые "смотрят" во 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 подтягивали туда и комментарии в стиле // - вот где был кошмар на улицу Вязов! можете даже поискать в гугле - полно советов в строке макросов не делать комментариев или делать их в /* таком виде */... даже я такие советы давал лет несколько тому назад
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения