Очень интересно спасибо. Сам недавно начал писать по АВРки, так что опыта не много. Но могу посоветовать вот что: исключи _delay_ms из кода, замени ее функцией аналогичной из avr/sleep.h за исключением действий с числами с плавающей точной. Если точно задержек не критична конечно +-1-2%, то можно значительно сэкономить на размере (процентов 80 точно). Жаль что у 13 тиньки только один таймер, но зато у нее 4 АЦП. Из-за у меня есть задумка на ее основе сделать автомат один с термистором.
Кстати вопрос в чем писал/компилял? У меня AVRStudio почему отказалась создавать проект для 13 тиньки на C только на асме.
>исключи _delay_ms из кода, замени ее функцией аналогичной из avr/sleep.h за исключением действий с числами с плавающей точной.
Не понял. Во-первых, где тут числа с плавающей точкой? Все в интах. Во-вторых, в avr/sleep.h лежат функции собственно усыпления микроконтроллера (перевода его в спящий режим), а не задержки.
Они у меня используются, но не тут. В активном режиме меня совершенно не устроит спящий микроконтроллер, он должен продолжать подавать ШИМ-сигнал и проверять сенсоры.
Меня здесь например раздражает строчка
double __tmp = ((F_CPU) / 4e3) * __ms;
Посчитать, округлить и переписать и сравни с какой точностью получится разница.
Буэ, мерзость какая, я и не знал что они внутри аж с даблами работают.
Однозначно нафиг, спасибо. В АВРках я только с фикседами работаю, когда необходимы дроби.
Оптимизация компилятора! Поэтому если поставишь оптимизацию в 0, ничего работать и не будет! Не слушай никого, все сам проверяй! =)
Вот что написано в этом же исходнике:
«In order for these functions to work as intended, compiler optimizations MUST be enabled, and the delay time MUST be an expression that is a known constant at compile-time.» translate.google.ru/ если непонятно, он весьма адекватно это переводит.
И вообще конструкция из толпы делэйев по 20мс мне не понятна, не проще ли написать один сразу на 100мс? Я более чем уверен что код с одним делэйем будет в разы меньше!!!
Не верите откомпильте сами:
Сначала откомпилен первый вариант а потом второй:
При этом сколько внутрь одной делэйки не вбивай, размер не будет меняться!
И вообще код очень не читаем, советую пользоваться макро, они облегчат вам жизнь.
#ifndef _BV
#define _BV(bit) (1 << (bit))
#endif
Этот делей лучше вообще убрать, у меня было полное ощущение что они юзают никак не даблы, поэтому большие делеи будут переполняться) Видимо, это мне приснилось)
В качестве компилятора+примитивная среда можно использовать WinAVR. AVRStudio, кстати, после установки WinAVR сама прикрутит в качестве компилятора gcc-avr.
Для зеленого не знаю солей (в самом деле, из чего вырастить ярко-зеленый?) а вот красно-оранжевый выращивается из красной кровяной соли. И выглядят очень неплохо, судя по фото (сам не выращивал). Говорят, они намного стабильнее кристаллов купороса.
Творим оригинальный подарок при помощи химии физики и электроники: часть 3