Перейти к содержанию
    

Ну дак я ж уже объяснял же - то, что генерит указаннное ПО - это пользовательский код, который загружается в МК программным загрузчиком, расположенным с адреса 0ч0800'0000. Код загрузчика предварительно прошит в МК. Его и надо отыскать вначале.

Нестандартные значения адреса в скрипте объясняется либо работой через такой загрузчик, либо (что маловероятно) злостной ошибкой авторов ПО.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

13 hours ago, Profi2005 said:

У ПЛК Nucleron nuc-24x там видимо УЖЕ лежит некий код, 

который затем передает управление на 0800 8000. У меня же там ничего НЕТ.

Вот именно! В доках от Нуклерон об этом как раз и написано, а в составе дистра Беремиц есть каркас этого загрузчика.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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)

Изменено пользователем Profi2005

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну опять же - я ж написал чтобы МК стартовал, в начале флеша у него что-то должно лежать. Второя ячейка 08000004 должна иметь в себе адрес начала исполняемого кода

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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().

Помимо этого, много еще чего может лежать.

Изменено пользователем Profi2005

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как раз всё просто.

2024-09-23212642.thumb.jpg.1cd6affdcf1a773048e1061dd7814902.jpg2024-09-23213230.jpg.9095f112fb5f5761b5729fefa6393eb3.jpg

При старте счетчик программ (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.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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". 

Затем переименовать его и прописать правильные пути. 

CM.PNG

2. Добавить файлы iec_types_all.h, iec_types.h в папку RTE\src\

3. Добавить файл nvic.h в папку ..\libopencm3\include\libopencm3\stm32\f1\

Файл взят отсюда libopencm3

После этого проект дошел до линковки.

image.thumb.png.32382dad76863adcde99efc27fb2ce70.png

nvic.h iec_types_all.h iec_types.h

Readme.md

Изменено пользователем Profi2005

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 9/17/2024 at 1:49 PM, Profi2005 said:

YAPLC 1.1.0 поверх.

Оказывается в YAPLC 1.1.0 уже все было 👹

image.thumb.png.3c53da16ac0c8198869a6b92ac870565.png

nuc-242-rte.elf.hex nuc-242-rte.elf.map nuc-242-rte.elf

Изменено пользователем Profi2005

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...