Подскажите нормальный компилятор.

Обсуждаем контроллеры компании Atmel.
Ответить
Вымогатель припоя
Аватара пользователя
Сообщения: 577
Зарегистрирован: Ср июн 19, 2013 08:10:48
Откуда: Москва, СПб, Липецк, Рязань

Сообщение ИС-пытатель »

Всем добрый день! Есть актуальная проблема с размером кода и правильной его компиляцией.
Когда программа относительно маленькая и простая, то проблем нет. Но вот сейчас столкнулся с такой проблемой:
пользуюсь студией 6.0 из-за удобства написания кода (хорошая подсветка синтаксиса и т.д.). Написал программу, которая состоит из 6 файлов, кучи макросов и условной компиляции. раза с тысячного вроде бы все скомпилировалось, все работает, но во время тестирования заметил, что помимо записи ЕЕПРОМ в отведенные 5 групп ячеек, пишет еще в 1 в середину памяти. Программе это не мешает не как, но меня это покоробило и начал разбирать, где мог накошачить. В результате, наткнулся на то, что при урезании программы в части записи в память (для выявления ошибки) компилятор вообще начал криво собирать урезанную версию. вместо записи значений затирает ячейки нулями, хотя в одну из них я 100% пишу значение (константа, которая в программе нигде не меняется и служит маркером валидности группы ячеек). Начал пробовать другие компиляторы. Установил новую, майскую студию 6.2. Так у той даже интерфес криво сделан. При переключении на студию часть ее окна остается прорисованной от другой только что отображаемой программы. Скомпилировала она мне еще хуже. Сами можете догадаться, как.. Тогда решил перенести код в хваленую 4-ю студию. Так после компиляции в ней у меня даже динамическая индикация перестала работать, хотя по коду она идет одна из первых. CV AVR тоже с ошибками компилирует, но уже с другими. Уже есть желание все на ассемблер перевести.. Я уже в отчаянии.. Подскажите, кто сталкивался с подобной проблемой, нормальный компилятор, который компилирует код так, как ты его написал, а не так, как ему хочется...
P.S. оптимизацию ставил на разные значения. В том числе, отключал вообще.
Реклама
Мудрый кот
Аватара пользователя
Сообщения: 1812
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

Сообщение Kavka »

Что-то это мне напоминает. :)) Ой как напоминает. :))
Может, таки, не компилятор виноват, а?
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 577
Зарегистрирован: Ср июн 19, 2013 08:10:48
Откуда: Москва, СПб, Липецк, Рязань

Сообщение ИС-пытатель »

Да не. ))) если бы все с одной ошибкой компилировали. А то все с разными. ))) Косяки, конечно были, не спорю. Но там все по мелочи и невнимательности. А тут все компиляторы по разному компилируют... мне тут IAR вот посоветовали..
Мудрый кот
Аватара пользователя
Сообщения: 1812
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

Сообщение Kavka »

Сам компилятор не может косячить при записи в EEPROM. С avr-gcc можно накосячить или при передаче параметров в функции библиотеки avr-lib, либо в собственной реализации процедуры записи в EEPROM. У тебя какой вариант?
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Реклама
Эиком - электронные компоненты и радиодетали
Вымогатель припоя
Аватара пользователя
Сообщения: 577
Зарегистрирован: Ср июн 19, 2013 08:10:48
Откуда: Москва, СПб, Липецк, Рязань

Сообщение ИС-пытатель »

У меня вызов процедуры. там всего 5 строк. я передаю два параметра - адрес, куда писать, и сам байт. В процедуре тупо жду завершения предыдущей записи, потом выставляю адрес и шлю байт на запись. Просто в усложненном варианте, когда я после записи еще проверяю, правильно ли записалось, все норм работает за исключением того, что пишется лишний адрес (причем пишется только при записи в первую группу ячеек), а когда убираешь проверку записанного значения, то вообще одни нули пишет.. это в 6.0, а в 4.1 студии вообще ничего не работает, не то что запись в ЕЕПРОМ..
Реклама
Мудрый кот
Аватара пользователя
Сообщения: 1812
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

Сообщение Kavka »

Может взять, таки, готовое?
http://avr-libc.nongnu.org/user-manual/ ... eprom.html
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 577
Зарегистрирован: Ср июн 19, 2013 08:10:48
Откуда: Москва, СПб, Липецк, Рязань

Сообщение ИС-пытатель »

Попробовать можно, но там код не такой уж и сложный, чтобы юзать целую библиотеку. Завтра попробую заменить
Мудрый кот
Аватара пользователя
Сообщения: 1812
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

Сообщение Kavka »

Если у тебя 6-ая студия и ты пишешь на Си, то ничего дополнительно брать не надо - оно уже там есть, только заголовочник подключить.
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Вымогатель припоя
Аватара пользователя
Сообщения: 577
Зарегистрирован: Ср июн 19, 2013 08:10:48
Откуда: Москва, СПб, Липецк, Рязань

Сообщение ИС-пытатель »

А по поводу 4-й и 6.2 что скажете? )
Мудрый кот
Аватара пользователя
Сообщения: 1812
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

Сообщение Kavka »

В 6-й версии точно нормальный современный компилятор.
А в 4-й студии зависит от версии. К 4.18 и младше, обычно, "прикручивался" WinAVR, который сейчас устарел малёх и не поддерживается (после того, как их под крыло взяла Atmel). Хотя, наверное, можно и AVR Toolchain "прикрутить". А к 4.19 можно и тот-же AVR toolchain, что и в 6-й версии "прикрутить".
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Вымогатель припоя
Аватара пользователя
Сообщения: 577
Зарегистрирован: Ср июн 19, 2013 08:10:48
Откуда: Москва, СПб, Липецк, Рязань

Сообщение ИС-пытатель »

Kavka писал(а):В 6-й версии точно нормальный современный компилятор..
Ага, как же, нормальный... Учитывая то, что даже обычный switch толком сделать не могут...
Мудрый кот
Аватара пользователя
Сообщения: 1812
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

Сообщение Kavka »

Не ругай gcc - компилятор нормальный! Большинство он устраивает и не только на avr, но и на других платформах включая x86. И устраивает он людей куда более опытных и профессиональных, которые до сих пор подобных косяков в компиляторе не нашли.
А ты тут сразу и у контроллеров с пол пинка баги находишь, а теперь компилятор у тебя виноват... :evil:
Проблема людей говорящих, что "компьютер делает не то что я хочу" заключается именно в том, что заключено в этой фразе. Соответственно, не зная как должна работать программа, в твоём случае, какие стандарты реализует конкретная версия компилятора gcc, ты пытаешься "скормить" компилятору исходник, который, по твоему представлению, должен делать одно, а скомпилированная программа делает другое, не то, что ты подразумеваешь. И, смею заметить, что компилятор ведёт себя строго следуя стандарту языка Си и многим другим стандартам и соглашениям заложенным в него. А ты этих стандартов и соглашений не знаешь. Вот и получается, что ты чего-то не знаешь, а компилятор "знает" и делает. Ну и кто тут виноват? Компилятор или тот, кто не знает стандартов по которым работает компилятор?

Так что начни с замены собственных процедур работы с EEPROM на библиотечные. А там видно будет.
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Вымогатель припоя
Аватара пользователя
Сообщения: 577
Зарегистрирован: Ср июн 19, 2013 08:10:48
Откуда: Москва, СПб, Липецк, Рязань

Сообщение ИС-пытатель »

Я понимаю, спор сейчас ни о чем, поскольку нет кода. Да даже если и выложу, захотите ли ковыряться в нескольких килобайтах, разбросанных по 6 исходникам? Библиотека и предопределенные макросы, конечно, хорошо.. Но отчего же не работает, когда следуешь строго даташиту? Должно еще лучше работать!

А как Вам вот такой видос? http://www.youtube.com/watch?v=7r54t3VuyIg
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1315
Зарегистрирован: Пт ноя 27, 2009 19:47:13
Откуда: Казань

Сообщение НАПАЛМ »

ИС-пытатель писал(а):
А как Вам вот такой видос? http://www.youtube.com/watch?v=7r54t3VuyIg
"АВР студио 6 - говно. Всем успехов." :))) :)))
uni
Встал на лапы
Аватара пользователя
Сообщения: 139
Зарегистрирован: Пт дек 07, 2007 11:17:40
Откуда: г. Екатеринбург

Сообщение uni »

Обычно причина - человеческий фактор. Когда кажется, что предусмотрел всё, а на самом же деле не вполне понимаешь как работает код в реальности. И кто же так код тестирует? Такие косяки нужно отлавливать при помощи отладчика, ставить точки останова и вперёд.
Россия навсегда!
Контактная информация:
Вымогатель припоя
Аватара пользователя
Сообщения: 577
Зарегистрирован: Ср июн 19, 2013 08:10:48
Откуда: Москва, СПб, Липецк, Рязань

Сообщение ИС-пытатель »

Какой нах отладчик? Кривой студийный или Протеус, который только для мигания светодиодиками и годится? Если в Протез что-то более-менее емкое загнать - он подыхает нафиг
Держит паяльник хвостом
Аватара пользователя
Сообщения: 906
Зарегистрирован: Ср апр 16, 2008 13:22:54
Откуда: Приднестровье, Тирасполь

Сообщение Goodefine »

ИС-пытатель писал(а):... Если в Протез что-то более-менее емкое загнать - он подыхает нафиг
Не надо только сказок. Трудности бывают если тайминги процессов близки к step time, а такое бывает либо из-за высокой частоты (работа буквально на тактах при десятках МГц), либо из-за косяков, например иголки при неправильном dead time, когда программа пытается честно обсчитать переходной процесс и симуляция вылетает с ошибкой. А подобные детские программы в нем отлаживаются на раз. И объем кода побоку - в референсах есть проект шахмат - можно играть в реальном времени на LCD дисплее. А насчет компилятора - подойдет любой. В студийном компиляторе глюки конечно есть, но поверьте, вам их не найти в обозримом будущем. Только в сказках бывает - взяли компилятор (тем более очень хороший) и сразу нашли глюки - на самом деле проблема в коде.
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
Вымогатель припоя
Аватара пользователя
Сообщения: 577
Зарегистрирован: Ср июн 19, 2013 08:10:48
Откуда: Москва, СПб, Липецк, Рязань

Сообщение ИС-пытатель »

на самом деле проблема в коде.
успокоил.. :)))
uni
Встал на лапы
Аватара пользователя
Сообщения: 139
Зарегистрирован: Пт дек 07, 2007 11:17:40
Откуда: г. Екатеринбург

Сообщение uni »

Какой нах отладчик? Кривой студийный или Протеус, который только для мигания светодиодиками и годится? Если в Протез что-то более-менее емкое загнать - он подыхает нафиг
Видимо такой, которого у тебя нет. У тебя программа примитивная. Иерархическое меню, кнопки, RTC и иногда USART и всё на mega16. Это спокойно симулируется в Proteus. Как пример более сложного проекта, который я отлаживал разными способами и в Proteus посмотри вот это: Демка проектов uSD и Tetris (звук только отключи). Мои проекты тоже на ATmega16, причём для моделирования в Proteus я использую 8 МГц кварц. Программы написаны на C++.

Тебе не компилятор подсказать надо, а прямые руки в аренду брать, признайся.

Ещё раз повторяю, когда не знаешь почему что-то происходит не так, а голова не может "промоделировать" работу кода, то обращаешься к отладчику. Можно как к программному, так и железному. Есть вообще три способа отладки кода под AVR:
- AVR Studio через JTAG (железный);
- AVR Studio 4 + спец плагин для студии от Proteus (программный);
- Proteus просто (программный).
Россия навсегда!
Контактная информация:
Вымогатель припоя
Аватара пользователя
Сообщения: 577
Зарегистрирован: Ср июн 19, 2013 08:10:48
Откуда: Москва, СПб, Липецк, Рязань

Сообщение ИС-пытатель »

Это не моя программа. Это видео из интернета. У меня 8535. три одновременно работающих таймера, АЦП, компаратор, прием/передача USART + обработка кнопок и динамичекая индикация на двух разрядах. + каждую минуту запись в память минут часов и суток в новую группу ячеек с затиранием старой группы. + заняты ВСЕ ноги контроллера. И причем, все это, за исключением, млять, записи в память правильно работает... :(
Ответить

Вернуться в «AVR»