EdgeAligned 86 19 сентября Опубликовано 19 сентября · Жалоба Ну дак я ж уже объяснял же - то, что генерит указаннное ПО - это пользовательский код, который загружается в МК программным загрузчиком, расположенным с адреса 0ч0800'0000. Код загрузчика предварительно прошит в МК. Его и надо отыскать вначале. Нестандартные значения адреса в скрипте объясняется либо работой через такой загрузчик, либо (что маловероятно) злостной ошибкой авторов ПО. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tonyk_av 44 20 сентября Опубликовано 20 сентября · Жалоба 13 hours ago, Profi2005 said: У ПЛК Nucleron nuc-24x там видимо УЖЕ лежит некий код, который затем передает управление на 0800 8000. У меня же там ничего НЕТ. Вот именно! В доках от Нуклерон об этом как раз и написано, а в составе дистра Беремиц есть каркас этого загрузчика. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Profi2005 0 20 сентября Опубликовано 20 сентября (изменено) · Жалоба 13 hours ago, EdgeAligned said: что генерит указаннное ПО - это пользовательский код, который загружается в МК программным загрузчиком *** RTE *** Using stm32f4-discovery board Target "yaplc" can be used to build and upload aplication to the board. If you want to run it, then folow these steps: 1. Build yaplc-runtime project and load it to the board (I do it with st-util on debug session start, I think OpenOCD may also be used). // For that // 2. Create a project with "yaplc" target, 3. build it, 4. connect to your target (see https://github.com/nucleron/RTE/blob/master/src/bsp/nuc-227-dev/plc_config.h#L27 for details) 5. and transfer aplication. 6. Now you can program //debug// your discovery board with YAPLC/IDE. And yes, to use YAPLC/IDE with stock discovery you should connect Boot0 and VDD pins with jumper just before pressing "Transfer PLC" button in YAPLC/IDE. // In that case STM32 will use own hardcoded loader, which receive code from COM and write it to flash afterwards // When aplication has been loaded - disconnect Boot0 from VDD. Or alternatively, you can add "mosfet with memory capasitor" circuit switch Boot0 automatically (see https://github.com/nucleron/RTE/blob/master/src/bsp/nuc-227-dev/plc_hw.c#L54 and https://github.com/nucleron/RTE/blob/master/src/bsp/nuc-227-dev/plc_config.h#L44 for details) Изменено 20 сентября пользователем Profi2005 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
EdgeAligned 86 20 сентября Опубликовано 20 сентября · Жалоба Ну опять же - я ж написал чтобы МК стартовал, в начале флеша у него что-то должно лежать. Второя ячейка 08000004 должна иметь в себе адрес начала исполняемого кода Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Profi2005 0 23 сентября Опубликовано 23 сентября (изменено) · Жалоба On 2/10/2020 at 4:07 PM, Kolia said: Возможно потому что адреса в HEX Файле начинаются с 0x10010000, а должны быть с 0x08008000 Попробуйте сделать из Hex бинарник и залить по адресу 0x08008000 YAPLC\IDE\yaplctargets\toolchain_yaplc.py -> Line 74 objcpy = [self.toolchain_prefix + "objcopy", "--change-address", self.load_addr, "-O", "ihex", self.exe_path, self.exe_path + ".hex"] -> objcpy = [self.toolchain_prefix + "objcopy", "-O", "ihex", self.exe_path, self.exe_path + ".hex"] И адрес в HEX будет 0x08008000 On 9/20/2024 at 1:34 PM, EdgeAligned said: Ну опять же - я ж написал чтобы МК стартовал, в начале флеша у него что-то должно лежать. Второя ячейка 08000004 должна иметь в себе адрес начала исполняемого кода Не так все просто. Обычно там лежит таблица векторов прерываний, обработчики прерываний, инициализация переменных и установка тактовой частоты процессора SystemInit. И только потом управление передается на __main(). Помимо этого, много еще чего может лежать. Изменено 23 сентября пользователем Profi2005 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
EdgeAligned 86 23 сентября Опубликовано 23 сентября · Жалоба Как раз всё просто. При старте счетчик программ (PC) устанавливается в 0ч0000'0000. А переключатель Boot0/Boot1 переносит этот стартовый адрес в начало адресов флеша. Поэтому, при запуске счетчик PC ставится на начало указанной загрузочной области, в начале которой расположена таблица векторов. В таблице векторов вторая ячейка - Reset - и её содержимое заносится в счетчик PC, и дальнейшая программа начинается именно оттудава, откуда указала ячейка Reset таблицы векторов. Вот как это работает. Всё остальное, типа вызова SystemInit - это необязательная, нерегламентируемая последовательность, чистая условность. SystemInit можно вообще выбросить, а настройку системной частоты не проводить, она будет дефолтной от HSI. Инициализация переменных - это тоже программная условность для языка Си. Вот тут указано вот что: /* Define memory regions. */ MEMORY { rom (rx) : ORIGIN = 0x08000000, LENGTH = 32K app_flash (rx) : ORIGIN = 0x08008000, LENGTH = 992K ram (rwx) : ORIGIN = 0x20000000, LENGTH = 8K appram (rwx) : ORIGIN = 0x20002000, LENGTH = 120K } PROVIDE( _stack = ORIGIN(appram) + LENGTH(appram) ); PROVIDE( _app_start = ORIGIN(app_flash) ); PROVIDE( _app_end = _app_start + LENGTH(app_flash) ); То есть, есть общий исполняемый код, начинающийся с 0x0800'0000 и код приложения с 0x0800'8000. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Profi2005 0 26 сентября Опубликовано 26 сентября (изменено) · Жалоба On 9/20/2024 at 10:29 AM, Profi2005 said: *** RTE *** Using stm32f4-discovery board Target "yaplc" can be used to build and upload aplication to the board. If you want to run it, then folow these steps: 1. Build yaplc-runtime project and load it to the board (I do it with st-util on debug session start, I think OpenOCD may also be used). // For that // 2. Create a project with "yaplc" target, 3. build it, 4. connect to your target (see https://github.com/nucleron/RTE/blob/master/src/bsp/nuc-227-dev/plc_config.h#L27 for details) 5. and transfer aplication. 6. Now you can program //debug// your discovery board with YAPLC/IDE. And yes, to use YAPLC/IDE with stock discovery you should connect Boot0 and VDD pins with jumper just before pressing "Transfer PLC" button in YAPLC/IDE. // In that case STM32 will use own hardcoded loader, which receive code from COM and write it to flash afterwards // When aplication has been loaded - disconnect Boot0 from VDD. Or alternatively, you can add "mosfet with memory capasitor" circuit switch Boot0 automatically (see https://github.com/nucleron/RTE/blob/master/src/bsp/nuc-227-dev/plc_hw.c#L54 and https://github.com/nucleron/RTE/blob/master/src/bsp/nuc-227-dev/plc_config.h#L44 for details) Тут надо внести пояснения. Прошивка МК состоит из двух частей : RTE (YAPLC/RTE) (0x0800 0000) и APP (softPLC) (0x0800 8000). Первая часть собирается с помощью Code Blocks, в папках RTE\projects\nuc-xxx\xxx-rte.cbp лежат под него проекты. В ней привязка к железу. *** Readme.md *** **IO manager** workflow is: * Init hardware. * Check hardware. * After softPLC cstartup code is called - check and sort locations. Locations are first sorted in three groups: **inputs**, **memories**, **outputs**. Ihside these groups locations are sorted based on IO protocol (driver) IDs. After first sort locations are checked vor validity, if no erorrs found, then protocol specific sort is done for **inputs**, **memories** and **outputs**. * Initiate IO activities on softPLC start. * Poll drivers every main loop cycle. * Get and set driver variables every softPLC cycle. * Terminate IO activities on softPLC stop. *** Вторая часть собирается из под YAPLС. В ней реализована логика приложения. С этим было все хорошо с самого начала. При сборке же первой части возникли проблемы. 1. Пришлось прикрутить компилятор arm-none-eab-gcc.exe Для этого на вкладке "Settings" -> "Compiler" выбрать "Toolchain Executables", скопировать свойства любого компилятора из списка кнопкой "Copy". Затем переименовать его и прописать правильные пути. 2. Добавить файлы iec_types_all.h, iec_types.h в папку RTE\src\ 3. Добавить файл nvic.h в папку ..\libopencm3\include\libopencm3\stm32\f1\ Файл взят отсюда libopencm3. После этого проект дошел до линковки. nvic.h iec_types_all.h iec_types.h Readme.md Изменено 26 сентября пользователем Profi2005 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Profi2005 0 27 сентября Опубликовано 27 сентября (изменено) · Жалоба On 9/17/2024 at 1:49 PM, Profi2005 said: YAPLC 1.1.0 поверх. Оказывается в YAPLC 1.1.0 уже все было 👹 nuc-242-rte.elf.hex nuc-242-rte.elf.map nuc-242-rte.elf Изменено 27 сентября пользователем Profi2005 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться