1921ВК035 FLASH

32-разрядные микроконтроллеры разработки АО "НИИЭТ"

Модераторы: ea, dav, bkolbov, Alis, pip, _sva_

dav
Сообщения: 179
Зарегистрирован: 14 дек 2015, 09:21
Предприятие: АО НИИЭТ
Откуда: АО НИИЭТ, Воронеж

Re: 1921DR035 CAN ID принимаемого сообщения

Сообщение dav »

Доброго времени суток!
smispp писал(а): 27 мар 2023, 14:54 То что код из NVR переносится в SRAM понятно. Видимо также как и с инициализируемой памятью. Хотя и не понятно, какая связь между объявлением секции RAMFUNC в РАМ с переносом кода туда из FLASH . А если бы я создал эту секцию во FLASH , тот что бы было?
Если создать секцию "ramfunc" во FLASH, то код будет выполняться из флешь, а не из ОЗУ.
Использование следующего кода линкера позволяет зарезервировать часть памяти в ОЗУ для размещения vtable, data и ramfunc, а значения для инициализации данной части ОЗУ - заполняются значениями из FLASH на этапе выполнения кода перед вызовом функции main() средствами компилятора.

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

	.data :
	{
		__data_start__ = .;
		*(vtable)
		*(.data*)
		*(.ramfunc*)
...
		. = ALIGN(4);
		/* All data end */
		__data_end__ = .;

	} > DATA_RAM AT > CODE_FLASH
smispp писал(а): 27 мар 2023, 14:54 достаточно ли держать в SRAM выдачу команды MFLASH и программный цикл проверки занятости , стоящий после выдачи команды?
Конечно, возможно объявить как ramfunc только те функции, которые непосредственно осуществляют запись и стирание Flash памяти.
В нашем загрузчике все функции, кроме функции инициализации загрузчика, размещаются в ОЗУ и все работает корректно.
smispp
Сообщения: 15
Зарегистрирован: 28 ноя 2022, 10:30
Предприятие: оао нпк спп

Re: 1921DR035 CAN ID принимаемого сообщения

Сообщение smispp »

dav писал(а): 28 мар 2023, 16:47 Конечно, возможно объявить как ramfunc только те функции, которые непосредственно осуществляют запись и стирание Flash памяти.
В нашем загрузчике все функции, кроме функции инициализации загрузчика, размещаются в ОЗУ и все работает корректно.
Получается , весь код загрузчика лежит в НВР, при старте он переносится в ОЗУ и оттуда исполняется. Тогда зачем так делать, если достаточно держать в ОЗУ небольшой кусок (выдача команды + ожидание). Лишняя работа? Загрузчику же не надо переписывать самого себя?
Ответить

Вернуться в «32-разрядные микроконтроллеры»