BOOTLOADER: вопросы

Обсуждаем контроллеры компании Atmel.
Dimon456
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Re: BOOTLOADER: вопросы

Сообщение Dimon456 »

OKF писал(а):Другой вариант - просто без изгалений, которые непонятно заради чего.
Как ради чего? Ему нужно было автоматизированный процесс создания "содержание названий функций", что бы после по названию функций обращаться, он его создал.
OKF писал(а): Что бы чел мог взять и скомпилить вообще другим компилятором.
Другим компилятором это каким? Iar, Keil, cvavr или еще каким?
Реклама
OKF
Это не хвост, это антенна
Сообщения: 1405
Зарегистрирован: Вт июн 07, 2011 08:03:18

Re: BOOTLOADER: вопросы

Сообщение OKF »

Какая разница. Любым другим, не GCC. Понятно, что у каждого свой доступ к памяти программ, свои наименования векторов и пр. Но если "нормально" написано, то всё переносится. На то он и Си.
Реклама
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18675
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: BOOTLOADER: вопросы

Сообщение ARV »

так и у меня все переносится, что и было доказано сборкой проекта под stm32.

а загрузчик без шаманства не сделать в принципе. во всяком случае для AVR.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Dimon456
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Re: BOOTLOADER: вопросы

Сообщение Dimon456 »

OKF писал(а):Но если "нормально" написано, то всё переносится.
А что не так?

Или вы хотите универсальный код не только под все типы компиляторов, да в добавок еще и под все типы контроллеров? Не, так не бывает.

Вам исходник дали, это уже очень много, тормошите его на свое усмотрение.
Автор вообще мог ограничиться одним hex-файлом и одним типом контроллера, и усе.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18675
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: BOOTLOADER: вопросы

Сообщение ARV »

что-то я попал в какой-то странный ступор - не могу понять, что происходит...

Код: Выделить всё

	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));
вот это код рабочий, если IO_BLOCK_SIZE равно 8 или 16, и не рабочий, если, например, 32 или 64.
самое удивительное - нерабочесть кода заключается в том, что флаг корректности прошивки после завершения не устанавливается (остаётся 0xFF)! сама прошивка при этом верная (если программатором принудительно прошить нужное значение флага в EEPROM, то прошивка стартует и работает).

с какого перепугу такое поведение?! какие будут идеи?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Реклама
OKF
Это не хвост, это антенна
Сообщения: 1405
Зарегистрирован: Вт июн 07, 2011 08:03:18

Re: BOOTLOADER: вопросы

Сообщение OKF »

ARV, хороший вы парень, но. Пишите вы как то не аккуратненько. Я бы даже сказал, по селянски.)
Мало того что отступы то так, то эдак (как бог на душу положит), так и пример не можете привести дабы кто то мог повторить. Или же мы должны аналитически (через анал?) войти в ваше положение? Я в вас разочаровываюсь.( Ну, понятно что вам насрать, но тем не менее, моё мнение вы услышали.
Реклама
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18675
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: BOOTLOADER: вопросы

Сообщение ARV »

спасибо, вы мне очень помогли!
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
OKF
Это не хвост, это антенна
Сообщения: 1405
Зарегистрирован: Вт июн 07, 2011 08:03:18

Re: BOOTLOADER: вопросы

Сообщение OKF »

А с фига ли! Вы ведь думаете только о себе!
Ага, вот у меня проблема... И что? Пальцем даже не пошевелите...
Нах-нах. Извините.
Dimon456
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Re: BOOTLOADER: вопросы

Сообщение Dimon456 »

ARV, я когда экспериментировал с W25Q32 записывал целые мегабайтные mp3, а не только несколько байт.
Вот пример моего кода
Спойлер

Код: Выделить всё

CMD(WP){	
	// режим програмирования
char data;
static unsigned long page_cnt;
static unsigned char rx_cnt=0;
#define write_byte 32

while (1)
	{	
	data = m_gets(); // 
	
   if(rx_cnt==0)
        {
        switch(data)
                {
                case CMD_PRG_MODE:
                        rx_cnt = 0;
						page_cnt = 0;
                        SPI_DisableSS_m();	
                        putch (ACK);
                        break;
                case CMD_CHIP_ERASE:
                        w25q32_chip_erase();
                        putch (ACK);
                        break;
                case CMD_PAGE_PRG:
                        mem_page_program_prepare(page_cnt); // пишем с нулевого адреса
                        putch (ACK); 
                        rx_cnt = 1;
                        break;
                case CMD_NORM_MODE:
                		putch (ACK);
                        while(1);//reset chip
                        break;
                default:
                	putch (NACK);
                        break;
                }
        }
   else
        { 
        SPI_WriteByte( data );
        if( (++rx_cnt)>write_byte )
                {
                SPI_DisableSS_m();
                rx_cnt = 0;
                page_cnt += write_byte;
                while( mem_read_status()&0x01 ) {}; 
                putch (ACK);
                }
        }	

	};
	return 0;
}
Ни каких циклов for и ни каких там SYM_END, а количество доступных страниц пусть в управляющей программе определяется.
И оно как то работало, да же на проводках.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18675
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: BOOTLOADER: вопросы

Сообщение ARV »

Dimon456, это немного не то... у меня проблема в том, что код, который как бы не должен зависеть от значения константы, тем не менее зависит от неё, причем в таком месте, где вообще связи не должно быть с этой константой!

Добавлено after 4 minutes 30 seconds:
OKF писал(а):отступы то так, то эдак (как бог на душу положит)
это с чего вдруг?! отступы строго по уровню вложенности кода
OKF писал(а):пример не можете привести дабы кто то мог повторить
а в чем смысл повторения? чтобы повторить загрузчик, надо не только код для МК повторить, но и компьютерную программу... уверен на 100%, что никто не станет этого делать.

пример кода приведен, проблема описана. тут либо я просто замыленным глазом не вижу явного ляпа, либо есть какой-то странный нюанс, о котором я не знаю... может, особенность компилятора, может, особенность МК... не могу даже представить.
OKF писал(а):Вы ведь думаете только о себе!
по вашему поведению видно, что вы уж точно о себе не думаете - самоотверженно срёте в теме с важными вопросами...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Dimon456
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Re: BOOTLOADER: вопросы

Сообщение Dimon456 »

ARV, проблема в том что вы не можете отследить это в реальном устройстве.
Обыкновенный bootloader avr_isp и то не так сделан как у вас, не понимаю, за чем изобретать велосипед.
Я бы взял готовый код и изменил его под свои нужды.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18675
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: BOOTLOADER: вопросы

Сообщение ARV »

Dimon456 писал(а):Я бы взял готовый код и изменил его под свои нужды
вы же понимаете, что готовый код на 90% состоит из протокола обмена данными между компьютером и МК? используя готовый код вы соглашаетесь с этим протоколом, и используете уже имеющуюся компьютерную утилиту, которая по этому протоколу кормит данными загрузчик... вот вам и причина изобретения велосипеда: если этот протокол не устраивает или сама утилита не устраивает, то...

еще раз: проблема не в самом по себе коде, а в том, что по абсолютно неизвестной причине после успешного завершения прошивки не записывается байт в EEPROM, если размер блока данных, которые посылает компьютер, больше 16 байт. только это, больше никаких комментариев мне не нужно...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Dimon456
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Re: BOOTLOADER: вопросы

Сообщение Dimon456 »

ARV писал(а):если размер блока данных, которые посылает компьютер, больше 16 байт. только это,
Что?
ARV писал(а):нерабочесть кода заключается в том, что флаг корректности прошивки после завершения не устанавливается
ARV писал(а):// При приёме символа конца данных индицируется состояние завершения.
SYM_END ?
Вы что не можете отследить что комп передает, и что в результате получает МК? Блин, я анализатор трафика ставил для этого.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18675
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: BOOTLOADER: вопросы

Сообщение ARV »

Dimon456 писал(а):Что?
я понимаю, что каждый больше писатель, а не читатель, но мне казалось, что я достаточно детально описал ЧТО.
Dimon456 писал(а):Вы что не можете отследить что комп передает
а вы можете отследить мысль в моём вопросе? надеюсь, вы догадываетесь, что я не стал бы спрашивать на форуме совета, если бы вопрос не был из ряда вон выходящим? уж какие-никакие навыки по поиску ошибок и отладке у меня имеются...

комп передает данные верно, и МК верно их принимает и прошивает, я об этом писал:
ARV писал(а):сама прошивка при этом верная (если программатором принудительно прошить нужное значение флага в EEPROM, то прошивка стартует и работает).
проблема в том, что по неизвестной причине на запись в EEPROM вот в этом месте

Код: Выделить всё

         // Устанавливается флаг корректности прошивки
         eeprom_update_byte(BOOT_FLAG_ADDR, FLAG_OK);
         eeprom_busy_wait();   // ждем конца записи
         asm volatile ("jmp 0x0000"); // и выполняется старт прошивки путем перехода на нулевой адрес.
влияет размер блока данных при обмене с компом!
IO_BLOCK_SIZE - это константа, задаваемая дефайном (одинаково для МК и для программы компа), она задает размер блока и может быть 8, 16, 32, 64 или 128 по моему хотению. но все работает только для 8 и 16, а для остального - прошивается верно, но в EEPROM не появляется отметки о верности прошивки!!!

ПОЧЕМУ?!
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
Starichok51
Модератор
Сообщения: 19055
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Re: BOOTLOADER: вопросы

Сообщение Starichok51 »

а вообще функция eeprom_update_byte что-то записывает? пусть не FLAG_OK, а другое значение?
а при размере более 16 байт может что-то затирается в ОЗУ и потом считывается не то, что там должно быть?
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18675
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: BOOTLOADER: вопросы

Сообщение ARV »

эта функция вообще записывает, например, ранее по коду есть участок, где эта функция записывает 0xFF, которое потом и не перезаписывает...

что касается затирания, то по коду это никак не просматривается, алгоритм цикла не должен ничего лишнего затирать...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
Starichok51
Модератор
Сообщения: 19055
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Re: BOOTLOADER: вопросы

Сообщение Starichok51 »

то, что не должно, это понятно.
но что-то более длинный блок данных портит, если с ним перестает правильно работать.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
OKF
Это не хвост, это антенна
Сообщения: 1405
Зарегистрирован: Вт июн 07, 2011 08:03:18

Re: BOOTLOADER: вопросы

Сообщение OKF »

ARV, извиняйте, я вчера немного погорячился.( Вы не сказали стартует ли сразу после записи?
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18675
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: BOOTLOADER: вопросы

Сообщение ARV »

сразу после записи стартует при блоке 8 или 16 байт, при других не стартует.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
OKF
Это не хвост, это антенна
Сообщения: 1405
Зарегистрирован: Вт июн 07, 2011 08:03:18

Re: BOOTLOADER: вопросы

Сообщение OKF »

Тогда Dimon прав. Не получаете SYM_END.
Ответить

Вернуться в «AVR»