KSN 0 24 августа, 2023 Опубликовано 24 августа, 2023 · Жалоба Интересно, какие отличия при выделение области памяти в icf файле через define region и define block? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Obam 38 24 августа, 2023 Опубликовано 24 августа, 2023 · Жалоба Интересно, какие отличия при выделение области памяти в icf файле через define region и define block? Блоки будут располагаться строго в том порядке, что программист приказал, насколько помню. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 25 августа, 2023 Опубликовано 25 августа, 2023 · Жалоба 12 hours ago, jcxz said: И никаких ошибок или варнингов при компиляции. Сделал всё также) Действительно, никаких ошибок или предупреждений. Светодиод теперь зависит от состояния переменной: Spoiler 321 322 s_calLed::set(!isCalibrated()); \ ??main_13: (+1) \ 0x402 0x.... LDR R1,??DataTable2_14 \ 0x404 0x7A08 LDRB R0,[R1, #+8] \ 0x406 0x2800 CMP R0,#+0 \ 0x408 0xD00E BEQ ??main_34 \ 0x40A 0x2080 MOVS R0,#+128 \ 0x40C 0x03C0 LSLS R0,R0,#+15 \ 0x40E 0xE00C B ??main_35 \ ??main_2: \ 0x410 0xE000'E100 DC32 0xe000e100 \ 0x414 0x....'.... DC32 s_generalCal \ 0x418 0x0003'EFD0 DC32 0x3efd0 \ 0x41C 0x0000'2198 DC32 0x2198 \ 0x420 0x0001'F7E8 DC32 0x1f7e8 \ 0x424 0x0001'4FF0 DC32 0x14ff0 \ ??main_34: (+1) \ 0x428 0x2040 MOVS R0,#+64 \ ??main_35: (+1) \ 0x42A 0x2290 MOVS R2,#+144 \ 0x42C 0x05D2 LSLS R2,R2,#+23 \ 0x42E 0x6190 STR R0,[R2, #+24] Скрипт линкера выглядит вот так: Spoiler /*###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__ = 0x08000000; /*-Memory Regions-*/ define symbol __ICFEDIT_region_ROM_start__ = 0x08000000; define symbol __ICFEDIT_region_ROM_end__ = 0x0800DBFF; define symbol CAL_INFO_ROM_START = 0x0800DC00; define symbol CAL_INFO_ROM_END = 0x0800FFFF; define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; define symbol __ICFEDIT_region_RAM_end__ = 0x20001FFF; /*-Sizes-*/ define symbol __ICFEDIT_size_cstack__ = 0x800; define symbol __ICFEDIT_size_heap__ = 0; /**** 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 block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; initialize by copy { readwrite }; place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; define region CAL_INFO_BLOCK = mem:[ from CAL_INFO_ROM_START to CAL_INFO_ROM_END]; do not initialize {section .calInfo}; place in CAL_INFO_BLOCK {section .calInfo}; place in ROM_region { readonly }; place in RAM_region { readwrite, block CSTACK, block HEAP }; export symbol __ICFEDIT_region_RAM_start__; export symbol __ICFEDIT_region_RAM_end__; Инициализация константы написана таким обрзаом: Spoiler #pragma pack(push, 2) // flash writing by 2 bytes only struct GeneralCal { uint16_t z0; uint16_t z1; uint16_t z2; uint16_t z3; bool calibrated; }; #pragma pack(pop) #pragma pack(push, 1) struct CalInfo { GeneralCal general; uint16_t tbl[4096]; }; __root volatile const CalInfo calInfo @ ".calInfo" { { 3502, 3318, 369, 184, // see readme.md false, },{ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002 и т.д. Но при запуске процессор попадает в HardFault. Расшифровка показала, что проблема тут: А в R0 находится адрес 0x0800DC00. Т.е. startup-код пытается инициализировать константный объект. Из документации на линкер следует, что директива do not initialize относится только к секциям типа zeroinit, т.е. в данном случае она не работает((( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 25 августа, 2023 Опубликовано 25 августа, 2023 · Жалоба 13 hours ago, jcxz said: PS: IAR v7.80.4 for ARM. На новые IARы переходить, как я вижу, Вы не спешите))) Как я понимаю, в этой версии Вам уже известны все его шаблоны поведения. А в новых продуктах возможно и новые баги появились😀 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 25 августа, 2023 Опубликовано 25 августа, 2023 · Жалоба 19 hours ago, pyroman said: a const volatile object, declare it with the __ro_placement attribute. See Вах! А это спасло отца русской демократии, т.е. меня! Вот это да! Спасибище!!!! static const volatile __ro_placement CalInfo calInfo @ ".calInfo" { Оптимизация: spee, no size constraint. Содержимое скрипта линкера: Spoiler /*###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__ = 0x08000000; /*-Memory Regions-*/ define symbol __ICFEDIT_region_ROM_start__ = 0x08000000; define symbol __ICFEDIT_region_ROM_end__ = 0x0800FFFF; define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; define symbol __ICFEDIT_region_RAM_end__ = 0x20001FFF; /*-Sizes-*/ define symbol __ICFEDIT_size_cstack__ = 0x400; define symbol __ICFEDIT_size_heap__ = 0; /**** 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 block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; initialize by copy { readwrite }; place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; define symbol CAL_INFO_PAGE_COUNT = 9; define symbol CAL_INFO_PAGE_SIZE = 1024; define block CAL_INFO_BLOCK with alignment = 8, size = CAL_INFO_PAGE_COUNT * CAL_INFO_PAGE_SIZE, fixed order {readonly section .calInfo}; place at address mem: 0x0800DC00 {block CAL_INFO_BLOCK}; place in ROM_region { readonly }; place in RAM_region { readwrite, block CSTACK, block HEAP }; export symbol __ICFEDIT_region_RAM_start__; export symbol __ICFEDIT_region_RAM_end__; Данные из map-файла: "A1", part 1 of 2: 0x200c CAL_INFO_BLOCK 0x800'dc00 0x2400 <Block> .calInfo const 0x800'dc00 0x200c main.o [1] - 0x800'fc0c 0x200c calInfo 0x800'dc00 0x200c Data Lc main.o [1] Кусок листинга со светодиодом: Spoiler 321 322 s_calLed::set(!isCalibrated()); \ ??main_16: (+1) \ 0x630 0x.... LDR R1,??DataTable2_14 \ 0x632 0x7A08 LDRB R0,[R1, #+8] \ 0x634 0x2800 CMP R0,#+0 \ 0x636 0xD002 BEQ ??main_36 \ 0x638 0x2080 MOVS R0,#+128 \ 0x63A 0x03C0 LSLS R0,R0,#+15 \ 0x63C 0xE000 B ??main_37 \ ??main_36: (+1) \ 0x63E 0x9801 LDR R0,[SP, #+4] \ ??main_37: (+1) \ 0x640 0x2290 MOVS R2,#+144 \ 0x642 0x05D2 LSLS R2,R2,#+23 \ 0x644 0x6190 STR R0,[R2, #+24] 323 Попытки инициализации в startup-коде нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 186 25 августа, 2023 Опубликовано 25 августа, 2023 · Жалоба 15 минут назад, haker_fox сказал: Вах! А это спасло отца русской демократии, т.е. меня! static const volatile __ro_placement CalInfo calInfo @ ".calInfo" { Вот я и говорил, немцы хоть и немного напридумывали насчет RAM, но задокументировали свои мысли)) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 25 августа, 2023 Опубликовано 25 августа, 2023 · Жалоба 2 minutes ago, Arlleex said: Вот я и говорил, немцы хоть и немного напридумывали насчет RAM, но задокументировали свои мысли)) Шведы) Они пока ещё шведы) А так - да, как Вы и говорили в другом посте: мощная оптимизация со средствами борьбы против её последствий) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 241 25 августа, 2023 Опубликовано 25 августа, 2023 · Жалоба 6 часов назад, haker_fox сказал: А в R0 находится адрес 0x0800DC00. Т.е. startup-код пытается инициализировать константный объект. Да, Вы правы: сейчас вставил Ваш код код в свою программу на XMC4700; загрузил; в самом начале (до startup) поставил в J-Link-е data-бряк по записи на адрес начала calInfo; и получил срабатывание бряка при попытке инициализации его первым байтом инициализатора calInfo. 2 часа назад, haker_fox сказал: Вах! А это спасло отца русской демократии, т.е. меня! Вот это да! Спасибище!!!! static const volatile __ro_placement CalInfo calInfo @ ".calInfo" { В IAR v7.80.4 это тоже сработало - после добавления перестало вылетать на data-бряк в startup-е. Вчера я не пробовал запускать ваш код на реальном камне. Только скомпилил. Поэтому не видел инициализации в startup. А смысла "inited" в .map-е не понял 4 часа назад, haker_fox сказал: На новые IARы переходить, как я вижу, Вы не спешите))) Как я понимаю, в этой версии Вам уже известны все его шаблоны поведения. А в новых продуктах возможно и новые баги появились😀 А смысл? Я сравнивал код, выдаваемый новыми IAR-ами. Он почти байт-в-байт такой-же, как в v7.80.4. Т.е. - IAR-овцы далее пошли не по пути улучшения работы компилятора (и его оптимизатора), а по пути навешивания всяких рюшечек и поддержки новых камней. А это всё ерунда и не нужно. Вот если бы новые IAR-ы хотя бы так не лажались при оптимизации кода и не делали столько глупостей - перешёл бы. А так - они только стали более монструозными и медленными и плюсов - почти никаких. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 25 августа, 2023 Опубликовано 25 августа, 2023 · Жалоба 3 minutes ago, jcxz said: Да, Вы правы Уф) Самое главное, что совместными усилиями нам удалось отдать верный и нужный приказ инструментарию) Надеюсь, что данный топик принесёт пользу коллегам по форуму💗 4 minutes ago, jcxz said: Вчера я не пробовал запускать ваш код на реальном камне По правде говоря, я даже не рассчитывал на такое) Ведь запуск чужого кода на своём железе - трата собственного времени, что не всегда возможно))) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 241 25 августа, 2023 Опубликовано 25 августа, 2023 · Жалоба 1 час назад, haker_fox сказал: Шведы) Они пока ещё шведы) А так - да, как Вы и говорили в другом посте: мощная оптимизация со средствами борьбы против её последствий) Для исконно русского любой иностранец - немец. ("немцы" - от "не мы"). Оптимизация IAR оставляет желать много лучшего. Мягко говоря. Слишком много дыр в ней. И никакого прогресса (в новых IAR-ах) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 25 августа, 2023 Опубликовано 25 августа, 2023 · Жалоба 8 minutes ago, jcxz said: А это всё ерунда и не нужно. Понял) Спасибо за мнение! Just now, jcxz said: И никакого прогресса (в новых IAR-ах) Может быть ко власти пришли эффективные менеджеры... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 241 25 августа, 2023 Опубликовано 25 августа, 2023 · Жалоба 2 минуты назад, haker_fox сказал: По правде говоря, я даже не рассчитывал на такое) Ведь запуск чужого кода на своём железе - трата собственного времени, что не всегда возможно))) В таком деле есть как минусы, так и плюсы: Трата времени на исследование чего-то нового, это в ближайшей перспективе - трата времени, а в дальней перспективе наоборот - его экономия. Как и любое обучение. Чем больше потратишь времени на изучение предмета, тем меньше его потратишь когда начнёшь работать по этому предмету. PS: Именно поэтому негативно отношусь к таким персонажам здесь, которые пишут, что-то типа "Подскажите быстрее! На изучение предмета и чтение мануалов нет времени - надо уже работу работать". Они его тратят во много раз больше, когда наугад ищут пути решения, не изучив как следует тему. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gms 1 25 августа, 2023 Опубликовано 25 августа, 2023 · Жалоба 5 минут назад, haker_fox сказал: Может быть ко власти пришли эффективные менеджеры... значит хорошо продается 2 минуты назад, jcxz сказал: в дальней перспективе наоборот - его экономия. вопрос философский на самом деле , чем больше знаешь , тем больше начинаешь копаться в сути и на это тоже времени уходит не мало и требуется куда более детальнее ответы , нежели - "ну работает же". 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
uni 6 25 августа, 2023 Опубликовано 25 августа, 2023 · Жалоба У меня 4 iar'овских компилятора на пк: 6.5, 7.8, 8.5, 9.3. Пользуюсь каждым время от времени. Они там ещё к unicode'у перешли не помню начиная с какой версии, поэтому старые скомпилированные либы будут всегда с предупреждением собираться в проекте по этому поводу. Ещё у меня есть icf-раскраска для Notepad++ 🙂 Так как меня заколебали родные icf и захотелось ваять собственные. Syntax Highlighting Scheme (IAR ICF).xml 1 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gms 1 25 августа, 2023 Опубликовано 25 августа, 2023 (изменено) · Жалоба Тему надо сохранить, очень полезная. Изменено 25 августа, 2023 пользователем haker_fox На форуме принято общение на русском языке. Не забывайте о громотности, пожалуйста. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться