Форум РадиоКот https://radiokot.ru/forum/ |
|
WinAvr в вопросах и ответах https://radiokot.ru/forum/viewtopic.php?f=57&t=6909 |
Страница 102 из 106 |
Автор: | ARV [ Ср окт 18, 2017 08:00:35 ] |
Заголовок сообщения: | Re: WinAvr в вопросах и ответах |
Пока_без_кота писал(а): Все что позже, поставляеться каким-то набором файлов, и я незнаю, как его установить. ну если вы работаете в студии, то проблемы, конечно, могут быть. я пользуюсь Eclipse и особо не горюю...можете попробовать, предварительно заархивировав папку с уже установленной версией avr-gcc, скачать более свежую версию и тупо перезалить содержимое папок - их названия одинаковы, файлы предыдущей версии будут затерты новыми... если не понравится - вытрете все вобще и из архива восстановите прежнюю версию. вся инсталляция заключается только в распаковке архива и правильном прописывании путей в PATH... Добавлено after 1 minute 43 seconds: Пока_без_кота писал(а): conflicting types for 'SendStr_P' это скорее всего из-за того, что прототип и реализация у вас не одинаковые. небось, в прототипе-то забыли const дописать...
|
Автор: | Пока_без_кота [ Ср окт 18, 2017 08:08:03 ] |
Заголовок сообщения: | Re: WinAvr в вопросах и ответах |
ARV писал(а): ... небось, в прототипе-то забыли const дописать... Бинго! Вы наверное и по фотографии много чего умеете Насчет подмены фалов, после работы попробую. |
Автор: | ARV [ Ср окт 18, 2017 08:49:12 ] |
Заголовок сообщения: | Re: WinAvr в вопросах и ответах |
Пока_без_кота писал(а): Бинго! ну дык легко указывать на те ошибки других, которые сам совершал не один раз...
|
Автор: | Пока_без_кота [ Ср окт 18, 2017 18:58:45 ] |
Заголовок сообщения: | Re: WinAvr в вопросах и ответах |
Эта музыка будет вечной ... Теперь такая ситуация: Все строки во флеше обьявлены вот так: Код: const char AT[] PROGMEM = "AT\r\n"; const char OK[] PROGMEM = "OK\r\n"; const char ATE0[] PROGMEM = "ATE0\r\n"; const char ATV0[] PROGMEM = "ATV0\r\n"; Есть функция парсинга строки: СпойлерКод: // Парсинг строки ================== 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 |
Автор: | ARV [ Ср окт 18, 2017 19:36:29 ] |
Заголовок сообщения: | Re: WinAvr в вопросах и ответах |
Логично. все указатели, которые "смотрят" во flash, должны быть указателями на константу. const char * var; надо читать задом наперед: [переменная] var - это указатель на символ-константу. то есть не переменная константа, а указатель на константу. сам указатель вполне себе не константный. если вам приспичит иметь константный указатель, то он должен быть записан иначе, вам уже объясняли: char * const var; - читаем задом наперед: var - это неизменяемый (т.е. константный) указатель на char Си - странный язык... чтобы понять некоторые записи, надо смотреть на них справа налево, хотя почти все читается слева направо... |
Автор: | Пока_без_кота [ Ср окт 18, 2017 22:18:28 ] |
Заголовок сообщения: | Re: WinAvr в вопросах и ответах |
Спасибо, понял. Почему вот так массив можно описать Код: unsigned char buffer[20]; а вот так уже нет Код: #define buffer_max 20; // Размерность буффера
unsigned char buffer[buffer_max]; |
Автор: | Аlex [ Ср окт 18, 2017 22:40:17 ] |
Заголовок сообщения: | Re: WinAvr в вопросах и ответах |
Пока_без_кота писал(а): а вот так уже нет Код: #define buffer_max 20; // Размерность буффера unsigned char buffer[buffer_max]; Можно. Но у Вас ошибка в дефайне. Сделайте сами замену текста и поймёте в чём ошибка Добавлено after 9 minutes 15 seconds: Си - странный язык... чтобы понять некоторые записи, надо смотреть на них справа налево, хотя почти все читается слева направо... Ничего странного, всё предельно просто. То, что слева от звёздочки - относится к типу на указываемый объект, всё что справа от неё - к самому указателю. |
Автор: | ARV [ Чт окт 19, 2017 06:36:11 ] |
Заголовок сообщения: | Re: WinAvr в вопросах и ответах |
Аlex писал(а): Ничего странного, всё предельно просто. привыкнуть можно, конечно, но вот что прямо-таки предельно просто, не соглашусь. если левее идентификатора переменной находится две звездочки, и между ними квалификатор[ы], то уже понять, что относится к левой, а что к правой звездочке уже не так элементарно... ну да ладно, это я уже брюзжу...
|
Автор: | Аlex [ Чт окт 19, 2017 07:34:45 ] |
Заголовок сообщения: | Re: WinAvr в вопросах и ответах |
Пока_без_кота писал(а): Прошу прощения, но я буквально скопировал buffer_max из дефайна в размерность буффера, и все равно ошибка "имеет место быть". Я не понимаю Вы меня не поняли. Заменять нужно не buffer_max, а то, на что это меняется в программе. Вы, по всей видимости, с трудом представляете, что такое define. На самом деле, всё очень просто. define - это обычная подмена одного текста, на другой. Не более того. Посмотрите, что и на что заменяется : Код: Заменяется Вот это На это | | | | | | #define buffer_max 20; // Размерность буффера и сами вручную замените у себя в программе. И сразу увидите ошибку. Мне не хочется Вам сразу на неё указывать. Хотелось бы, чтобы Вы её сами обнаружили, дабы в дальнейшем в неё меньше вляпываться. |
Автор: | Пока_без_кота [ Чт окт 19, 2017 17:01:20 ] |
Заголовок сообщения: | Re: WinAvr в вопросах и ответах |
Я действительно не понимаю чего я не понимаю. Я понимаю, что дефайн, это просто змена текста. Но я не понимаю, почему, если я его определил, эта замена не хочет осуществляться. |
Автор: | WiseLord [ Чт окт 19, 2017 17:02:48 ] |
Заголовок сообщения: | Re: WinAvr в вопросах и ответах |
А зачем там в дефайне лишняя точка с запятой? Это приведёт к ошибке 100%. СпойлерКод: unsigned char buffer[20;]; // ошибка |
Автор: | viiv [ Чт окт 19, 2017 17:13:31 ] |
Заголовок сообщения: | Re: WinAvr в вопросах и ответах |
А зачем там в дефайне лишняя точка с запятой? Это приведёт к ошибке 100%. Ошибка которую находит компилятор - это не ошибка вовсе Так, опечатка, исправил - и нет ее |
Автор: | Пока_без_кота [ Чт окт 19, 2017 17:20:18 ] |
Заголовок сообщения: | Re: WinAvr в вопросах и ответах |
А зачем там в дефайне лишняя точка с запятой? Это приведёт к ошибке 100%. А откуда вы взяли этот код? В том, что я выложил несколькими постами выше, нет этой точки с запятой...
|
Автор: | Apparatchik [ Чт окт 19, 2017 17:27:03 ] |
Заголовок сообщения: | Re: WinAvr в вопросах и ответах |
Уберите ту, которая есть... |
Автор: | viiv [ Чт окт 19, 2017 17:27:38 ] |
Заголовок сообщения: | Re: WinAvr в вопросах и ответах |
Спасибо, понял. Почему вот так массив можно описать Код: unsigned char buffer[20]; а вот так уже нет Код: #define buffer_max 20; // Размерность буффера unsigned char buffer[buffer_max]; хм... Это не Ваш пост? |
Автор: | Пока_без_кота [ Чт окт 19, 2017 17:31:28 ] |
Заголовок сообщения: | Re: WinAvr в вопросах и ответах |
Всем спасибо за ваше терпение!!! До меня дошло. |
Автор: | Аlex [ Чт окт 19, 2017 17:54:12 ] |
Заголовок сообщения: | Re: WinAvr в вопросах и ответах |
А зачем там в дефайне лишняя точка с запятой? Это приведёт к ошибке 100%. СпойлерКод: unsigned char buffer[20;]; // ошибка Вот знал я, что кто-нибудь не выдержит и скажет Совсем не дают людям подумать ... Я же не зря человеку написал - замените текст вручную. Причём подробно расписал, что и на чего меняется. |
Автор: | Пока_без_кота [ Чт окт 19, 2017 18:29:03 ] |
Заголовок сообщения: | Re: WinAvr в вопросах и ответах |
Не сердитесь)) Я думаю, мне еще представиться случай подумать В свое опрадание только скажу, что я воспринимал эту точку с запятой не как обязательную конструкцию языка Си, а как символ начала коментария (сказываеться опыт программирования на 3 ассемблерах, без единого ЯВУ). |
Автор: | ARV [ Чт окт 19, 2017 18:40:34 ] |
Заголовок сообщения: | Re: WinAvr в вопросах и ответах |
точка с запятой в макросе - это еще фигня на постном масле... а вот древние версии avr-gcc подтягивали туда и комментарии в стиле // - вот где был кошмар на улицу Вязов! можете даже поискать в гугле - полно советов в строке макросов не делать комментариев или делать их в /* таком виде */... даже я такие советы давал лет несколько тому назад |
Автор: | Пока_без_кота [ Чт окт 19, 2017 18:49:32 ] |
Заголовок сообщения: | Re: WinAvr в вопросах и ответах |
Спасибо за "предупредительный выстрел" |
Страница 102 из 106 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |