для IARа в документации все расписано. Для AVR в AN тоже все расписано. Т.е. учиться будем с чьих-то слов, вместо того, чтобы прочитать документацию? Тогда каждое слово будет откровением.
Вам лично не нужны откровения? Не читайте, у нас теперь свобода. Вы беспокоитесь обо мне, чтобы у меня не выработалась дурная привычка? Могу Вас уверить, что я умею читать документацию. Читал ее с начала 80-х, преимущественно в оригинале. Так что, спасибо за заботу, но она излишня. Или у Вас есть глубокое убеждение, что без вкуривания многотомных мануалов и апноутов путь в программирование ДОЛЖЕН быть закрыт? На чем основано такое убеждение? Моежет не отвечать, потом... сюрприз будет Ну, подумать, что у Вас просто неприязнь к товарищу avreal или зависть к тому признанию, которое мы ему отдаем, я просто не смею.
А Вы никогда не пользовались подсказками от коллег для того, чтобы освоить новое? Можете себя вспомнить "в коротких штанишках" или уже на в силах?
Ничего удивительного.... IAR уже давно перестал быть лидером... ... Поэтому сравнения компиляторов и дают в результате +- лапоть...
Специально поискал среди Вашего шума - и нашел хоть что-то полезное. Спасибо за Ваш вклад. Но знаете, пришлось искать...
Ну тогда ещё парочку... чтобы не искал... )))))))) 1. Использовать по минимуму уникальные особенности компилятора... 2. Избегать использования недокументированных особенностей компилятора...
_________________ "Я не даю готовых решений, я заставляю думать!"(С)
Компания MEAN WELL пополнила ассортимент своей широкой линейки светодиодных драйверов новым семейством XLC для внутреннего освещения. Главное отличие – поддержка широкого спектра проводных и беспроводных технологий диммирования. Новинки представлены в MEANWELL.market моделями с мощностями 25 Вт, 40 Вт и 60 Вт. В линейке есть модели, работающие как в режиме стабилизации тока (СС), так и в режиме стабилизации напряжения (CV) значением 12, 24 и 48 В.
1. Использовать по минимуму уникальные особенности компилятора... 2. Избегать использования недокументированных особенностей компилятора...
Ну, второе вытекает из первого. И вообще, очень общие рекомендации. Но - спасибо! Это значительно более конструктивно, чем следующий пост.
Но появление второго постинга как раз и отбивает у меня желание вникать в Ваши советы. Тем более, что Ваш стиль с этими 100500 скобками, вопросами, многоточиями не добавляет привлекательности Вашим желчным заметкам. Блондинистый стиль, ИМХО. И спорить с Вами на данную тему я больше не буду. И так нафлудили мы тут предостаточно. Считайте, что мне нечего ответить на все, что Вы сейчас накатаете. Со скобочками
Но появление второго постинга как раз и отбивает у меня желание вникать в Ваши советы. Тем более, что Ваш стиль с этими 100500 скобками, вопросами, многоточиями не добавляет привлекательности Вашим желчным заметкам. Блондинистый стиль, ИМХО.
Ну... вы хоть какую-то пользу извлекли из моих постов... я из ваших - НОЛЬ!!! Стиль комунечегосказатьнооченьхочется... ИМХО... ))))))))
Цитата:
И спорить с Вами на данную тему я больше не буду.
А и правильно... ваши знания вам не позволяют...
_________________ "Я не даю готовых решений, я заставляю думать!"(С)
Ваш стиль с этими 100500 скобками, вопросами, многоточиями не добавляет привлекательности Вашим желчным заметкам. Блондинистый стиль, ИМХО. ..... Считайте, что мне нечего ответить на все, что Вы сейчас накатаете. Со скобочками
С уважением, Юра Власенко Киев
Брат, не распаляйся, это бесполезно. Каждый ответ на сообщения некоторых, порождает бесполезную страницу, бесполезной перепалки. Просто помни что "Если оборачиваться на лай каждой собаки, то далеко не уйдеш....."
Последний раз редактировалось shads Вс сен 16, 2012 14:19:23, всего редактировалось 1 раз.
Слушай, а ник ты себе подобрал в точку, не знаю что это означает, но думаю оно соответствует твоему стилю.
HHIMERA писал(а):
Лучше расскажи о результатах... прога то хоть как-то работает???
А какое тебе дело до проги..... Во первых, ты ни капли не добавил в ее функциональность, во вторых, это же не та программа, не тот стиль программирования который бы был достоен твоего внимания, так что проходи мимо и кончай засирать ветку.
avreal поясни пожалуйста, насчет применения static к функциям, народ чето разделился на за и против. Какие могут быть сюрпризы если пихать статик неглядя (а смысл есть, многие убедились, да и я тоже)
Заголовок сообщения: Re: C для AVR -- пишем аккуратно.
Добавлено: Чт сен 20, 2012 00:29:29
Друг Кота
Карма: 25
Рейтинг сообщений: 99
Зарегистрирован: Вс янв 24, 2010 19:19:52 Сообщений: 4468 Откуда: Главный Улей России (Moscow)
Рейтинг сообщения:0
Жуть.... Шо за срач в тематическом разделе? А по существу - советы ТС дельные. Пригодятся многим. Бывают моменты, когда в ТЗ стоит мега 8 и как не крути, а надо впихнуть в нее огромный функционал и бутлодер и при этом памяти мало. Сталкивался с этим на днях. На АСМе не укладывался в сроки, на Си памяти не хватало для бутлодера. Причем выжал все соки с исходника, а код бутлодера не хотел никак сжиматься в 512 слов. Советы тов. avreal оказались как раз в тему. Удалось ужать код на 24 байта и все влезло. Компилятор нагло инлайнил одну из функций, не смотря на выставленную оптимизацию "ужать по самое нехочу"
_________________ I am DX168B and this is my favourite forum on internet!
Как оказалось, в программе «работает всё, кроме длинной вспышки при занесении кода». Косяк был в простой функции мигания светодиодом.
Сначала она писалась под аргумент -- число смен состояния светодиода, т.е. для одиночной вспышки нужно было передавать count = 2, для десяти вспышек 20. Так сама функция проще
Потом я решил сделать более «естественный» параметр -- число вспышек, хоть это и увеличило код . Строку count = 2*count - 1; добавил, но при редактировании функция приняла вид:
_________________ Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
avreal поясни пожалуйста, насчет применения static к функциям, народ чето разделился на за и против. Какие могут быть сюрпризы если пихать статик неглядя (а смысл есть, многие убедились, да и я тоже)
Ну разбуянились… По поводу затащить меня ещё на один форум, так это не в агитаторах дело. Я просто (часто безуспешно) стараюсь сокращать время, потраченное на форумы. На сахаре, наверное, уже с год не показывался. Где уж ещё куда-то ввязываться.
Теперь по основному вопросу. Давайте сначала определимся, что называть «бездумно натыкивать куда попало». Где граница «бездумности»? Может, она вовсе безгранична? А то ведь и long для AVR «бездумно напихивать» вредно -- код сильно раздуется. И uint8_t или там unsigned char «бездумно напихивать» не дело, информация пропасть может. Если постараться, то и комментарий можно так впихнуть, что «неизвестно, чем аукнется» *)
Не «не глядя». Я четко ограничил область — функции, вызываемые только из той единицы трансляции (т.е. компилируемого файла со всеми его include), в которой они определены. Все внутренние, «служебные» функции модуля — первые кандидаты на static. Как кто-то привёл пример на том форуме — функция обмена одним битом в модуле поддержки 1-Wire. Применение static к таким функциям ничего не меняет в остальной программе. Если же функция таки откуда-то ещё вызывается, то линкер ругнётся, программа не соберётся. Нужно будет подумать (во сюрприз!), почему это она вызывается, если начало казаться, что она внутренняя в модуле. И либо снять static, либо переопределить интерфейс к модулю. В принципе, во включаемом файле могут быть и функции «с телами» и при включении в несколько других файлов вызываться они будут из разных единиц трансляции. Без static будет конфликт имён, линкер не даст собрать. Со static конфликта не будет, но это будут разые копии одной функции (на уровне объектного кода они будут иметь разные имена), что невыгодно по размеру.
Во вторых, пусть кто-то приведёт конкретный пример, когда применение static приведёт к «трудноуловимым глюкам» скомпилированной программы. Причём именно по вине слова static, а не по вине более ранних ошибок, заметённых под коврик отсутствием явного ограничения области видимости для функций, видимость которых и должна быть ограничена по сути проекта. А то сколько бы много я примеров не приводил — всегда можна будет сказать «а в x1 каком варианте при x2 каких условиях таки может x3 что получиться». А так — пусть приведут один пример.
С моей точки зрения, «не писать static, так как это неизвестно чем аукнется» — это не
неписать бездумно static
а
бездумноне писать static
*) Кстати, когда-то была интересная задачка — определить во время выполнения программы, была при компиляции включена поддержка вложенных комментариев или нет (борландовские компиляторы имели вредный ключик -C для разрешения вложенных комментариев). Моё решение
Код:
printf("Nested comments is %s\n",*/*/**/"*/"/*"/**/=='*'?"OFF":"ON");
Во… Судя по получившейся раскраске, в php тоже вложенные комментарии не допускаются
_________________ Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
p.s. А чего это на wasm.ru возле «Истории одного байта» стоит 2003 год? Это ж максимум начало 2001-го. А то и гораздо раньше, просто в эху попало в 2001-ом (сам текст, содержание, к началу 90-ых относится).
Эх, сколько там в обсуждении знакомых имён… И Валера Журило еще жив был, он осенью 2001-го от инфаркта умер… А летом мне, послеинфарктному, всё в метро место уступал…
_________________ Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
С моей точки зрения, «не писать static, так как это неизвестно чем аукнется» — это не
неписать бездумно static
а бездумноне писать static
Бездумно и есть бездумно - это как на диахтунге... сначала, как обезьяны с гранатами, тыкали наперегонки static куда попало, а потом, почесав затылок... "а вдруг рванёт?"...
_________________ "Я не даю готовых решений, я заставляю думать!"(С)
Насколько я понял из последнего пояснения avreal, static лепить к функции настолько же опасно как и хранить данные в unsigned char..... Там тоже могут быть проблЭмы - информация пропасть может
2. Вместе с макросом _BV в библиотеке определены также еще несколько полезных макросов для работы с битами. Один из них:
#define loop_until_bit_is_set( sfr, bit ) do { } while (bit_is_clear(sfr, bit))
ожидает в пустом цикле, пока в регистре ввода-вывода sfr установится бит bit. Грех не воспользоваться готовеньким, тем более что библиотечные элементы, как правило, хорошо оптимизированы и протестированы.
Слепая вера в истинность и непогрешимость... "все так делают, значит это правильно"... В данном случае макрос скрывает суть происходящего, а многие просто слепо поверят в то, что "библиотечные элементы, как правило, хорошо оптимизированы и протестированы"... (у меня, лично, по опыту общения с различными либами, такое архисмелое утверждение просто вызывает ржач...) Вся фишка в том, что этот цикл, при определённых условиях, может стать "вечным"... что, в итоге, может обернуться либо зависанием, либо перезапуском, если включен WDT... http://www.pic24.ru/doku.php/osa/articl ... ut_errors#правила_для_функций
Цитата:
Часто в программах встречаются участки кода, которые потенциально могут привести к зависанию. Самый распространенный пример – ожидание готовности или подтверждения при работе с внешней периферией Если произошла непредвиденная ситуация (обрыв линии, короткое замыкание, конденсат и пр.), то из этого цикла мы никогда не выйдем. (Разве что только WDT сработает). Поэтому нужно всегда предусматривать аварийный выход из таких циклов. Можно это делать с помощью таймера. Правда, целый таймер выделять для этого иногда накладно, и есть смысл работать с глобальной переменной, которая будет уменьшаться в прерывании по таймеру
Всех неверующих и думающих "это мне и нах не нужно, у меня такого просто быть не может" отсылаю опять к исходникам Чена...
Предвкушая вопрос одиозных личностей "А к чему это всё?", напоминаю, тема называется "C для AVR -- пишем аккуратно."...
_________________ "Я не даю готовых решений, я заставляю думать!"(С)
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 38
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения