Строго говоря, bootloader необязателен. В готовом изделии можно одним легким движением поставить FUSE-бит BOOTRST в 1, и управление после сброса будет передаваться непосредственно программе, по адресу 0x0000 (именно так я и сделал с ATmega в светодиодном индикаторе).
Испокон веков ;) размер bootloader-а Arduino был 2048. Конечно, реально-то он был чуть меньше, но размер bootloader-а кодируется двумя FUSE-битами BOOTSZ1 и BOOTSZ0. Таким образом, для ATmega168P есть четыре фиксированных размера: 256, 512, 1024 и 2048 байт. Для ATmega328P тоже четыре размера, но поскольку памяти программ у него в два раза больше, то разработчики чипа "сдвинули" размеры bootloader-а в сторону увеличения: 512, 1024, 2048, 4096.
Те, кто писал программы на ассемблере, обычно загадочно улыбаются в ответ на мою фразу "скетч занял пять килобайт в памяти программ". Оно и понятно - при программировании на C память программ съедается стремительно, зато и сама программа пишется значительно быстрее. Именно поэтому ATmega328P заменил на боевом посту ATmega168 - в некоторых случаях просто не хватало 16К памяти программ.
Стоп-стоп, не 16, а 14-ти ( минус 2К на бутлоадер ). После замены процессора становится свободно 30К:
Но что делать, если скетч занял 30936 байт? Переходить на ассемблер?
Старшие товарищи давно бились над задачей сокращения размера bootloader-а хотя бы до 1К. Совместными усилиями они этого достигли, о чем и написал в своем блоге уважаемый Spiff. Последовательность действий такая:
- Берется новый исходник bootloader-а, компиляется в .hex
- Результат зашивается в память ATmega, корректируются fuse-биты
- Чтобы ArduinoIDE поняла, что у нее стало больше памяти для результата компиляции, правится boards.txt.
Итак, вот мой результат компиляции: bootloader_1k_0015.zip. Его надо распаковать в каталог с Arduino IDE 0015, при этом изменятся две секции в списке плат, станет так: "Arduino Duemilanove w/ ATmega 328P 1k" и "Arduino Diecemila or Duemilanove w/ ATmega 168 1K". Выбирайте нужную, затем можно прошить новый bootloader через Arduino IDE, дальше - как обычно.
Сами понимаете, что если прошить 1К-bootloader, то даже немодифицированная Arduino IDE будет замечательно работать, но не наоборот :(
Более правильно было бы добавить секции, но тогда Arduino IDE не сможет корректно отобразить в своем окне информацию об ошибках, сославшись на длинную цепочку исключений java - согласитесь, это не очень удобно.
Я скомпилировал bootloader-ы для тех процессоров, для которых смог 100%-но убедиться в работоспособности - с трудом, но нашел таки ATmega168P :) Во всех моих Arduino сейчас работает ATmega328P - выписал целую упаковку из-за границы, и, как всегда, раздаю остатки через "молоток"...
на mouser.com по 4.30, правда доставка дорогая... но если брать 25 штук, (цена по 3.30) то доставка окупиться.
ОтветитьУдалитьнет, не окупится.
ОтветитьУдалитьцена за 25 штук - 117 USD, доставка - 120 USD.
получается по 9,48.
3,30*25=82.50 откуда 117?
ОтветитьУдалитьОт маузера доставка 120$ -- это fedex и ups. Eсть варианты когда гораздо дешевле... :-) например, можно написать им пиьмо и вышлют USPSом без страховок в bubble envelop без всяких проблем. Пробовал, работает. Обойдется примерно в 20-30. Второй вариант, это через местных. Мне например доставка обходится в 7-10 долларов. До 40 унций -- обычное письмо. до Украины -- в пределах 20-25. так что все возможно. Если еще и оказия отсюда -- то совсем дешево получается.
PS Зря книгу потер...
Ну, ясно дело, что с оказией и/или через местных дешевле.
ОтветитьУдалитьПисьмо писать им не пробовал, спасибо за идею. Основная проблема - вычислить вес посылки, чтобы стала понятна ее стоимость по международным тарифам.
Ссылку на книгу я потер, чтобы ко мне не было вопросов от правообладателей. А скачать её можно в любом крупном англоязычном торренте (те же пираты), причем без всяких паролей. Сокращенная версия книги - вообще халявная ;)
Письма писать следует всегда. Даже если у них написана Россия, они могут не знать как туда отправить. И еще очень многие торгуют через e-bay, там свои нюансы, но чаще всего получается договориться.
ОтветитьУдалить