|
nRF52832 автоматическое дописывание стека во флешь IAR |
|
|
|
Aug 21 2018, 10:17
|
Местный
Группа: Участник
Сообщений: 280
Регистрация: 18-03-17
Пользователь №: 95 877
|
Полазил по Dev zone, нашел https://devzone.nordicsemi.com/f/nordic ... -1-for-arm , человек поднимает как раз мою тему. Но из прочитанного не ясно от куда взялся адрес define region S110_region = mem:[from 0x00000000 to 0x00015FFF]; , а именно 0x00015FFF. Почему 0x00015FFF ?
|
|
|
|
|
Aug 21 2018, 14:04
|
Местный
Группа: Участник
Сообщений: 280
Регистрация: 18-03-17
Пользователь №: 95 877
|
Цитата from 0 to 0x25fff для s132 Сделал настройки linker на рис. Настройки .icf CODE /*###ICF### Section handled by ICF editor, don't touch! ****/ /*-Editor annotation file-*/ /* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ /*-Specials-*/ define symbol __ICFEDIT_intvec_start__ = 0x26000; /*-Memory Regions-*/ define symbol __ICFEDIT_region_ROM_start__ = 0x26000; define symbol __ICFEDIT_region_ROM_end__ = 0x7ffff; define symbol __ICFEDIT_region_RAM_start__ = 0x20002a98; define symbol __ICFEDIT_region_RAM_end__ = 0x2000ffff; export symbol __ICFEDIT_region_RAM_start__; export symbol __ICFEDIT_region_RAM_end__; /*-Sizes-*/ define symbol __ICFEDIT_size_cstack__ = 8192; define symbol __ICFEDIT_size_heap__ = 8192; /**** End of ICF editor section. ###ICF###*/
define memory mem with size = 4G; define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__];
define region S110_region = mem:[from 0x00000000 to 0x25fff];
"S110_Firmware": place in S110_region { section .s110_section };
define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; define block RO_END with alignment = 8, size = 0 { };
initialize by copy { readwrite }; do not initialize { section .noinit };
keep { section .intvec }; place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; place in ROM_region { readonly, block RO_END }; place in RAM_region { readwrite, block CSTACK, block HEAP }; Iar выдал ошибку unable to allocate space for sections/blocks with a total estimated minimum size of 0x2ce24 bytes (max align 0x4) in <[0x00000000-0x00025fff]> (total uncommitted space 0x26000).
Сообщение отредактировал Alex_Golubev - Aug 21 2018, 14:05
Эскизы прикрепленных изображений
|
|
|
|
|
Aug 22 2018, 01:37
|
Местный
Группа: Участник
Сообщений: 280
Регистрация: 18-03-17
Пользователь №: 95 877
|
Цитата Где вы взяли файл размером 0x2ce24 (183844) байта? С помощью hex2bin переделал ble_app_uart_pca10040_s132.hex в .bin. Посмотрел размер файла с помощью jflash получилось 183844 байта. Умножил на два и получил размер 0x00059C48. Цитата Вопрос второй. Вы точно уверены, что проект для S132 корректно заработает с S110 Я подключил проект S132,а S110 просто взял название с форума DEV ZONE. Или я не понял вашего вопроса?
Сообщение отредактировал Alex_Golubev - Aug 22 2018, 01:50
Эскизы прикрепленных изображений
|
|
|
|
|
Aug 22 2018, 08:02
|
Местный
Группа: Участник
Сообщений: 280
Регистрация: 18-03-17
Пользователь №: 95 877
|
Цитата Какой ble_app_uart_pca10040_s132 ?! Понял я это только после того, когда написал на форуме DEV ZONE . Сейчас буду пробовать с s132_nrf52_6.0.0_softdevice.hex. Заранее уточню define region S132_region = mem:[from 0x00000000 to x]; вместо x кокой адрес написать?
Сообщение отредактировал Alex_Golubev - Aug 22 2018, 08:03
|
|
|
|
|
Aug 22 2018, 10:26
|
Местный
Группа: Участник
Сообщений: 280
Регистрация: 18-03-17
Пользователь №: 95 877
|
Добил я IAR. На DEV ZONE направили меня на правильный путь . Полностью очистил флешь и записал из IAR и все заработало. Воть . В общем куму надо: CODE /*###ICF### Section handled by ICF editor, don't touch! ****/ /*-Editor annotation file-*/ /* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ /*-Specials-*/ define symbol __ICFEDIT_intvec_start__ = 0x26000; /*-Memory Regions-*/ define symbol __ICFEDIT_region_ROM_start__ = 0x26000; define symbol __ICFEDIT_region_ROM_end__ = 0x7ffff; define symbol __ICFEDIT_region_RAM_start__ = 0x20002a98; define symbol __ICFEDIT_region_RAM_end__ = 0x2000ffff; export symbol __ICFEDIT_region_RAM_start__; export symbol __ICFEDIT_region_RAM_end__; /*-Sizes-*/ define symbol __ICFEDIT_size_cstack__ = 8192; define symbol __ICFEDIT_size_heap__ = 8192; /**** End of ICF editor section. ###ICF###*/
define memory mem with size = 4G; define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__];
define region S132_region = mem:[from 0x00000000 to 0x00049448];
"S132_Firmware": place in S132_region { section .s132_section };
define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; define block RO_END with alignment = 8, size = 0 { };
initialize by copy { readwrite }; do not initialize { section .noinit };
keep { section .intvec }; place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; place in ROM_region { readonly, block RO_END }; place in RAM_region { readwrite, block CSTACK, block HEAP }; Конечно есть у меня вопросы, но думаю нужно немного подождать чтобы мысли структурировались. Теперь квест II бутлодер. Можете подсказать с чего начать?
|
|
|
|
|
Aug 22 2018, 10:47
|
Профессионал
Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877
|
А это ничего, что ROM_region и S132_region перекрываются? И вообще, откуда опять взялись эти цифирки "mem:[from 0x00000000 to 0x00049448]" ? Вообще, для прояснения, я б начал с документации. Цифры там устарели (сейчас размер софтдевайса другой), но общий принцип никуда не делся.
--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
|
|
|
|
|
Aug 22 2018, 10:56
|
Местный
Группа: Участник
Сообщений: 280
Регистрация: 18-03-17
Пользователь №: 95 877
|
Цитата А это ничего, что ROM_region и S132_region перекрываются? Вы имеете в виду что S132_region должен лежать в приделах 0x00003000 - 0x0001F000 SoftDevice ? Если по этой ссылки https://infocenter.nordicsemi.com/index.jsp...dfu_memory.html то область должна быть SoftDevice 0x0000 1000 - 0x0002 6000 (148 kB). CODE /*###ICF### Section handled by ICF editor, don't touch! ****/ /*-Editor annotation file-*/ /* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ /*-Specials-*/ define symbol __ICFEDIT_intvec_start__ = 0x26000; /*-Memory Regions-*/ define symbol __ICFEDIT_region_ROM_start__ = 0x26000; define symbol __ICFEDIT_region_ROM_end__ = 0x7ffff; define symbol __ICFEDIT_region_RAM_start__ = 0x20002a98; define symbol __ICFEDIT_region_RAM_end__ = 0x2000ffff; export symbol __ICFEDIT_region_RAM_start__; export symbol __ICFEDIT_region_RAM_end__; /*-Sizes-*/ define symbol __ICFEDIT_size_cstack__ = 8192; define symbol __ICFEDIT_size_heap__ = 8192; /**** End of ICF editor section. ###ICF###*/
define memory mem with size = 4G; define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__];
define region S132_region = mem:[from 0x00000000 to 0x00026000];
"S132_Firmware": place in S132_region { section .s132_section };
define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; define block RO_END with alignment = 8, size = 0 { };
initialize by copy { readwrite }; do not initialize { section .noinit };
keep { section .intvec }; place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; place in ROM_region { readonly, block RO_END }; place in RAM_region { readwrite, block CSTACK, block HEAP }; А вот что за область памяти Master Boot Record (MBR) мне не ясно. И если написать define region S132_region = mem:[from 0x00001000 to 0x00026000]; То программа снова не работает. Может Master Boot Record (MBR) уже включена в SoftDevice .Hex.
Сообщение отредактировал Alex_Golubev - Aug 22 2018, 11:15
|
|
|
|
|
Aug 22 2018, 11:44
|
Профессионал
Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877
|
Цитата Вы имеете в виду что S132_region должен лежать в приделах 0x00003000 - 0x0001F000 SoftDevice ? А эти цифры откуда? Отложили бы вы всё, да денёк-другой полистали нордиковскую документацию. Метод тыка и слепого копипаста работает плохо... MBR - это нордиковская штука, которая умеет: запускать application, запускать пользовательский бутлоадер (правда, я пока не разбирался, как этого добиться), а также копировать данные во флеш памяти (для организации обновления "на лету" через резервную область). Поставляется исключительно в бинарном виде. В вышеупомянутом hex'е, действительно, "склеены" MBR + SoftDevice. Где об этом написано, я не помню. Хорошо видно, если открыть файл в любой программе, которая умеет hex. Видно две области данных - одна стартует с нуля, вторая - с 0x1000.
--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|