Вт июл 05, 2022 20:29:33
Как ради чего? Ему нужно было автоматизированный процесс создания "содержание названий функций", что бы после по названию функций обращаться, он его создал.OKF писал(а):Другой вариант - просто без изгалений, которые непонятно заради чего.
Другим компилятором это каким? Iar, Keil, cvavr или еще каким?OKF писал(а): Что бы чел мог взять и скомпилить вообще другим компилятором.
Чт июл 07, 2022 09:02:11
Чт июл 07, 2022 10:43:20
Чт июл 07, 2022 13:54:37
А что не так?OKF писал(а):Но если "нормально" написано, то всё переносится.
Ср сен 07, 2022 10:49:49
flash_page_addr = 0;
// главный цикл загрузки
do {
// очищаем страницу
memset(page, 0xFF, SPM_PAGESIZE);
// заполняем страницу
for(page_ofs = 0; page_ofs < SPM_PAGESIZE; page_ofs += IO_BLOCK_SIZE){
put_byte(SYM_READY);
wdt_enable(WDTO_500MS);
byte = get_byte();
wdt_disable();
// при приеме символа данных
switch(byte){
case SYM_DATA:
// загружается очередная порция данных.
io_get(page + page_ofs, IO_BLOCK_SIZE);
break;
case SYM_END:
page_ofs = SPM_PAGESIZE;
break;
}
}
// после заполнения страницы выдаём стоп-символ
put_byte(SYM_WAIT);
// если начали обновление - прошивка недействительна
eeprom_update_byte(BOOT_FLAG_ADDR, 0xFF);
// После приема данных для целой страницы памяти выполняется прожиг страницы.
program_page(flash_page_addr, page);
flash_page_addr += SPM_PAGESIZE;
// При приёме символа конца данных индицируется состояние завершения.
if(byte == SYM_END) {
// Устанавливается флаг корректности прошивки
eeprom_update_byte(BOOT_FLAG_ADDR, FLAG_OK);
eeprom_busy_wait(); // ждем конца записи
asm volatile ("jmp 0x0000"); // и выполняется старт прошивки путем перехода на нулевой адрес.
}
// И так повторяется, пока не придет признак конца данных или все страницы будут прожжены.
} while(flash_page_addr < (0x7000));
Ср сен 07, 2022 14:27:16
Ср сен 07, 2022 15:48:18
Ср сен 07, 2022 16:08:57
Ср сен 07, 2022 19:00:04
Ср сен 07, 2022 20:27:49
это с чего вдруг?! отступы строго по уровню вложенности кодаOKF писал(а):отступы то так, то эдак (как бог на душу положит)
а в чем смысл повторения? чтобы повторить загрузчик, надо не только код для МК повторить, но и компьютерную программу... уверен на 100%, что никто не станет этого делать.OKF писал(а):пример не можете привести дабы кто то мог повторить
по вашему поведению видно, что вы уж точно о себе не думаете - самоотверженно срёте в теме с важными вопросами...OKF писал(а):Вы ведь думаете только о себе!
Ср сен 07, 2022 21:05:52
Ср сен 07, 2022 21:15:37
вы же понимаете, что готовый код на 90% состоит из протокола обмена данными между компьютером и МК? используя готовый код вы соглашаетесь с этим протоколом, и используете уже имеющуюся компьютерную утилиту, которая по этому протоколу кормит данными загрузчик... вот вам и причина изобретения велосипеда: если этот протокол не устраивает или сама утилита не устраивает, то...Dimon456 писал(а):Я бы взял готовый код и изменил его под свои нужды
Ср сен 07, 2022 21:21:16
Что?ARV писал(а):если размер блока данных, которые посылает компьютер, больше 16 байт. только это,
ARV писал(а):нерабочесть кода заключается в том, что флаг корректности прошивки после завершения не устанавливается
SYM_END ?ARV писал(а):// При приёме символа конца данных индицируется состояние завершения.
Ср сен 07, 2022 21:37:32
я понимаю, что каждый больше писатель, а не читатель, но мне казалось, что я достаточно детально описал ЧТО.Dimon456 писал(а):Что?
а вы можете отследить мысль в моём вопросе? надеюсь, вы догадываетесь, что я не стал бы спрашивать на форуме совета, если бы вопрос не был из ряда вон выходящим? уж какие-никакие навыки по поиску ошибок и отладке у меня имеются...Dimon456 писал(а):Вы что не можете отследить что комп передает
проблема в том, что по неизвестной причине на запись в EEPROM вот в этом местеARV писал(а):сама прошивка при этом верная (если программатором принудительно прошить нужное значение флага в EEPROM, то прошивка стартует и работает).
// Устанавливается флаг корректности прошивки
eeprom_update_byte(BOOT_FLAG_ADDR, FLAG_OK);
eeprom_busy_wait(); // ждем конца записи
asm volatile ("jmp 0x0000"); // и выполняется старт прошивки путем перехода на нулевой адрес.
Ср сен 07, 2022 23:24:45
Чт сен 08, 2022 06:13:25
Чт сен 08, 2022 09:18:15
Чт сен 08, 2022 20:46:15
Чт сен 08, 2022 21:10:32
Чт сен 08, 2022 21:13:50