Цитата(Br.Misha @ Dec 29 2009, 21:10)

Вопрос: как можна записать байты в определенные адреса и потом считать их оттуда и можно ли вообще считывать основной программой FLASH в которой записан бутлоалер?
Сначала ответ на последний вопрос - зависит от того, как зашиты фузы BLB. Если в 00, то чтение запрещено. Но есть довольно простой обход: в области загрузчика по фиксированному адресу (я располагаю в самых последних адресах), располагается функция, примерно такая:
Код
uint32_t get_serial()
{
return 0;
}
Она компилится в простой код:
Код
54 .global _Z6serialv
56 _Z6serialv:
57 .LFB32:
58 .LSM2:
59 /* prologue: frame size=0 */
60 /* prologue end (size=0) */
61 .LSM3:
62 0000 60E0 ldi r22,lo8(0)
63 0002 70E0 ldi r23,hi8(0)
64 0004 80E0 ldi r24,hlo8(0)
65 0006 90E0 ldi r25,hhi8(0)
66 /* epilogue: frame size=0 */
67 0008 0895 ret
Вызвав эту функцию из области приложения, получаем серийный номер в регистрах независимо от состояния битов BLB.
Теперь первый вопрос: прописать на место этих фиктивных команд команды LDI с серийным номером (и самостоятельно увеличить его после успешной прошивки) умеет AVReal. Если AVReal по каким-то причинам не устраивает - можно написать програмку, подставляющую серийник в нужном виде прямо в файл прошивки.