Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Вопросы начинающих

Вопросы начинающих Прежде чем задать вопрос, стоит воспользоваться поиском

Ответ
 
Опции темы Опции просмотра
Старый 29.10.2018, 15:54   #1
alexD
Junior Member
 
Регистрация: 06.11.2013
Возраст: 38
Сообщений: 26
Вес репутации: 118/20
alexD will become famous soon enoughalexD will become famous soon enough
По умолчанию Как преобразовать адрес данных в hex файле?

Контроллер PIC24F.
Подскажите, как преобразовывается адрес данных из файла hex в адрес данных в памяти программ?
Вот две записи из hex файла.
:020000040000fa
:10300000041800000a0000002fe622000e7f2400b2

Здесь 3000 адрес преобразуется в адрес в памяти программ 0x1800...

Вопрос простой, извиняюсь, что-то не соображу к вечеру.
alexD вне форума   Ответить с цитированием
Старый 29.10.2018, 16:03   #2
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 31
Сообщений: 1,885
Вес репутации: 3528/77
besogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond repute
По умолчанию Re: Как преобразовать адрес данных в hex файле?

intel hex изначально был сделан для узкого адресного пространства.

адрес состоит и суммы адреса сектора и смещения.

пример для pic32
02 0000 04 1d00 dd
10 1800 00 580a400f00000000380a400f00000000 96
10 1810 00 80bf023c0400438c010004240400837c 4c

структура
кол-во данных
адрес
тип данных
данные
контрольная сумма
Код:
/**
 * calculate checksum of intel hex
 * @param data
 * @param length
 * @return 
 */
__attribute__((pure, leaf, noinline, section(".startup")))
u8 sys_hex_crc(const u8 * restrict data,
	       const u32 length)
{
	uf result = 0;

	for(u32 cnt = length; cnt; --cnt){
		result += *data++;
	}

	result = (~result + 1)&0xff;

	return result;	
}
возвращаемся к строчкам hex
02 0000 04 1d00 dd
10 1800 00 580a400f00000000380a400f00000000 96
10 1810 00 80bf023c0400438c010004240400837c 4c

первая - длина 2 байта. адрес 0. тип данных 4 - значит данные есть адрес сектора.
адрес сектора далее по hex считать 0x1d00, сумма
вторая - длина 10 байт. адрес 0x1800. тип данных 00 - данные, значит далее идут данные. потом сумма.

итого по второй строчке - по адресу 0x1d001800 записать 580a400f00000000380a400f00000000
besogon вне форума   Ответить с цитированием
Старый 29.10.2018, 16:09   #3
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 31
Сообщений: 1,885
Вес репутации: 3528/77
besogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond repute
По умолчанию Re: Как преобразовать адрес данных в hex файле?

забыл, еще - есть какая-то вещь, связанная с little endian для данных для pic32. вспоминать надо.

иначе говоря данные в поле данных идут не так, как есть готовность это понимать - лучше в отладке смотреть, что там по факту.
besogon вне форума   Ответить с цитированием
Старый 29.10.2018, 18:24   #4
alexD
Junior Member
 
Регистрация: 06.11.2013
Возраст: 38
Сообщений: 26
Вес репутации: 118/20
alexD will become famous soon enoughalexD will become famous soon enough
По умолчанию Re: Как преобразовать адрес данных в hex файле?

besogon, большое спасибо!
alexD вне форума   Ответить с цитированием
Старый 30.10.2018, 10:56   #5
alexD
Junior Member
 
Регистрация: 06.11.2013
Возраст: 38
Сообщений: 26
Вес репутации: 118/20
alexD will become famous soon enoughalexD will become famous soon enough
По умолчанию Re: Как преобразовать адрес данных в hex файле?

Вот нашел ответ, почему адрес 3000 в hex файле превратиться в адрес 1800 в памяти программ
https://www.microchip.com/forums/FindPost/506998
alexD вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с интерфейсом I2C maxNTF Продукция MICROCHIP 34 23.03.2009 12:45
как-бы мне преобразовать число в шестнадцатеричное для отображения как десятеричное?.. maagalex Продукция MICROCHIP 34 30.12.2008 23:50
Как в mplab при компиляции в hex, заполнить и EEPROM Синклер Продукция MICROCHIP 8 26.11.2007 19:36
проблемка с PIC16F628A bereg_ok Продукция MICROCHIP 72 07.09.2007 11:00
Как и где получить МАС адрес? Николай Общетехнические вопросы 1 25.05.2007 13:35


Часовой пояс GMT +3, время: 00:16.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd. Перевод: zCarot