tonyk_av 31 20 июня, 2023 Опубликовано 20 июня, 2023 (изменено) · Жалоба 5 hours ago, KARLSON said: И тут проблема - компилятор создаёт бинарник размером в 300 Мб Переписанный под мои нужды скрипт из Куба. Размещает по порядку 192 байта параметров ПЛК и 16000 байт программы начиная с адреса сектора 1. Скрипт линкёра. Spoiler /** ****************************************************************************** * @file LinkerScript.ld * Abstract : Linker script for Discovery-F407xx Board embedding STM32F407xx * device from stm32f4 series 512Kbytes FLASH * 192Kbytes RAM (112+16+64) * * Set heap size, stack size and stack location according * to application requirements. * * Set memory bank area and size if external memory is used ****************************************************************************** * @attention * * <h2><center>© Copyright (c) 2020 STMicroelectronics. * All rights reserved.</center></h2> * * This software component is licensed by ST under BSD 3-Clause license, * the "License"; You may not use this file except in compliance with the * License. You may obtain a copy of the License at: * opensource.org/licenses/BSD-3-Clause * ****************************************************************************** */ /* Entry Point */ ENTRY(Reset_Handler) /* Highest address of the user mode stack */ _estack = ORIGIN(RAM) + LENGTH(RAM); /* end of "RAM" Ram type memory */ _Min_Heap_Size = 0x800; /* required amount of heap */ _Min_Stack_Size = 2K; /* required amount of stack */ /* Memories definition */ MEMORY { RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 128K SECTOR_0 (rx) : ORIGIN = 0x08000000, LENGTH = 16K SECTOR_1_2 (rx) : ORIGIN = 0x08004000, LENGTH = 32K SECTOR_3 (rx) : ORIGIN = 0x0800C000, LENGTH = 16K SECTOR_4 (rx) : ORIGIN = 0x08010000, LENGTH = 64K /* Reserved */ SECTOR_5_7 (rx) : ORIGIN = 0x08020000, LENGTH = 384K } /* Sections */ SECTIONS { /* The startup code into "FLASH" Rom type memory */ .isr_vector_FLASH : { . = ALIGN(4); KEEP(*(.isr_vector_FLASH)) /* Startup code */ . = ALIGN(4); } >SECTOR_0 .plc_params : { . = ALIGN(2); KEEP (*(.plc_params)) /*. = ALIGN(2);*/ } >SECTOR_1_2 .plc_prog : { /*. = ALIGN(2);*/ KEEP (*(.plc_prog)) . = ALIGN(2); } >SECTOR_1_2 .plc_D8xxx : { . = ALIGN(2); KEEP (*(.plc_D8xxx)) . = ALIGN(2); } >SECTOR_1_2 .plc_data_regs : { . = ALIGN(2); KEEP (*(.plc_data_regs)) . = ALIGN(2); } >SECTOR_3 /* The program code and other data into "FLASH" Rom type memory */ .text : { . = ALIGN(4); *(.text) /* .text sections (code) */ *(.text*) /* .text* sections (code) */ *(.glue_7) /* glue arm to thumb code */ *(.glue_7t) /* glue thumb to arm code */ *(.eh_frame) KEEP (*(.init)) KEEP (*(.fini)) . = ALIGN(4); _etext = .; /* define a global symbols at end of code */ } >SECTOR_5_7 /* Constant data into "FLASH" Rom type memory */ .rodata : { . = ALIGN(4); *(.rodata) /* .rodata sections (constants, strings, etc.) */ *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ . = ALIGN(4); } >SECTOR_5_7 .ARM.extab : { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >SECTOR_5_7 .ARM : { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) __exidx_end = .; . = ALIGN(4); } >SECTOR_5_7 .preinit_array : { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); KEEP (*(.preinit_array*)) PROVIDE_HIDDEN (__preinit_array_end = .); . = ALIGN(4); } >SECTOR_5_7 .init_array : { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); KEEP (*(SORT(.init_array.*))) KEEP (*(.init_array*)) PROVIDE_HIDDEN (__init_array_end = .); . = ALIGN(4); } >SECTOR_5_7 .fini_array : { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); KEEP (*(SORT(.fini_array.*))) KEEP (*(.fini_array*)) PROVIDE_HIDDEN (__fini_array_end = .); . = ALIGN(4); } >SECTOR_5_7 _sidata = LOADADDR(.data); /* Initialized data sections into "RAM" Ram type memory */ .isr_vector_RAM : { . = ALIGN(4); KEEP(*(.isr_vector_RAM)) PROVIDE_HIDDEN ( __isr_vector_RAM = .); . = ALIGN(4); } >RAM .data : { . = ALIGN(4); _sdata = .; /* create a global symbol at data start */ *(.data) /* .data sections */ *(.data*) /* .data* sections */ . = ALIGN(4); _edata = .; /* define a global symbol at data end */ } >RAM AT> SECTOR_5_7 /* Uninitialized data section into "RAM" Ram type memory */ . = ALIGN(4); .bss : { /* This is used by the startup in order to initialize the .bss section */ _sbss = .; /* define a global symbol at bss start */ __bss_start__ = _sbss; *(.bss) *(.bss*) *(COMMON) . = ALIGN(4); _ebss = .; /* define a global symbol at bss end */ __bss_end__ = _ebss; } >RAM /* User_heap_stack section, used to check that there is enough "RAM" Ram type memory left */ ._user_heap_stack : { . = ALIGN(8); PROVIDE ( end = . ); PROVIDE ( _end = . ); . = . + _Min_Heap_Size; . = . + _Min_Stack_Size; . = ALIGN(8); } >RAM /* Remove information from the compiler libraries */ /DISCARD/ : { libc.a ( * ) libm.a ( * ) libgcc.a ( * ) } .ARM.attributes 0 : { *(.ARM.attributes) } } В программе. Spoiler const uint8 __PLC_params[ SIZE_BYTE_PARAMS ] \ __attribute__ ( (section( ".plc_params" ), used ) ) = { MAX_STEP / 1000, 0x00, // 00 0x0000 -- SIZE IN STEP 16000 0x00, 0x00, // 02 -- 0x00, 0x00, // 04 -- ....... } const uint16 __PLC_prog[ MAX_STEP ] \ __attribute__ ( (section( ".plc_prog" ), used ) ) = { 0x2800, 0xC801, 0x001C, // -|M0|-(M1)- 0xFFFF, // ----[FEND]- 0x000F // -----[END]- }; Изменено 20 июня, 2023 пользователем tonyk_av Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 35 20 июня, 2023 Опубликовано 20 июня, 2023 · Жалоба 1 hour ago, tonyk_av said: ПЛК А Вы программу для ПЛК генерируете какой программой (beremiz, openPLC, ...) ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tonyk_av 31 20 июня, 2023 Опубликовано 20 июня, 2023 · Жалоба 2 hours ago, x893 said: 3 hours ago, tonyk_av said: А Вы программу для ПЛК генерируете какой программой (beremiz, openPLC, ...) ? GX Works2 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KARLSON 1 20 июня, 2023 Опубликовано 20 июня, 2023 · Жалоба В 20.06.2023 в 02:29, jcxz сказал: В IAR, чтобы оно правильно работало, кроме префикса __no_init у переменных, у вас в командном файле компоновщика для этой секции должно быть указано: do not initialize {section .SettingsSection}; По аналогии с IAR, можно предположить, что и здесь в скрипте компоновщика нужно указать нечто аналогичное. Вангую, что нужную инструкцию искать нужно в мануале на компоновщик. В общем, да. Теперь секция выглядит так /*KEEP(*(.SettingsSection)) *(.SettingsSection)*/ .markerSettings (0x20000000) (NOLOAD): { KEEP(*(.SettingsSection)) } >RAM И бинарник теперь нормальной величины) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RusikOk 1 10 июля, 2023 Опубликовано 10 июля, 2023 · Жалоба В 14.06.2023 в 19:45, dimka76 сказал: У Eclipse есть настройка Stop on first build error ну настройка то есть. только она не работает 😈 индусы в своем репертуаре Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 35 10 июля, 2023 Опубликовано 10 июля, 2023 · Жалоба 36 minutes ago, RusikOk said: ну настройка то есть. только она не работает 😈 индусы в своем репертуаре Скорее всего гуру программирования в своём репертуаре. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RusikOk 1 10 июля, 2023 Опубликовано 10 июля, 2023 · Жалоба 27 минут назад, x893 сказал: Скорее всего гуру программирования в своём репертуаре Вы действительно считаете, что это нормальное поведение? загружать левую прошивку Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 35 10 июля, 2023 Опубликовано 10 июля, 2023 · Жалоба 14 minutes ago, RusikOk said: Вы действительно считаете, что это нормальное поведение? загружать левую прошивку Если нужно загрузить - значит нормальное. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RusikOk 1 10 июля, 2023 Опубликовано 10 июля, 2023 · Жалоба 13 минут назад, x893 сказал: Если нужно загрузить - значит нормальное. 1) Вы пытаетесь уйти от ответа (скорее всего сами понимаете, что это не нормальное поведение компилятора) 2) кому нужно? мне такое уж точно не нужно. да и сомневаюсь что кому то нужен мусор во флеше контроллера Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 35 10 июля, 2023 Опубликовано 10 июля, 2023 · Жалоба 4 minutes ago, RusikOk said: 1) Вы пытаетесь уйти от ответа (скорее всего сами понимаете, что это не нормальное поведение компилятора) 2) кому нужно? мне такое уж точно не нужно. да и сомневаюсь что кому то нужен мусор во флеше контроллера Столько раз уже я здесь читал ошибки в компиляторах, IDE, процессорах и прочее. А в результате оказалось всё как в пословице - Дело было не в бобине, ... сидел в кабине. Кому нужно ? Тому кто сидит между стулом и клавиатурой. Дисскуссия ни о чём. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
EdgeAligned 53 10 июля, 2023 Опубликовано 10 июля, 2023 · Жалоба 59 минут назад, x893 сказал: здесь читал ошибки в компиляторах, IDE, процессорах и прочее Ага, некоторые "чрезвычайно хорошие" программисты при первой же ошибке клянут компилятор или баги в железе. Знакомая ситуация, недавно даже тут на этом форуме рассматривалась - чел заявил, что это несомненно баг в железе, а оказалось, что "чрезвычайно хороший" программист банально накосячил, склеивая куски копипащеного кода и микроконтроллер, встретив косяк в коде, исполнял этот косяк - стирал всю прошивку полностью 🙂 Автор топика так же упорно сопротивлялся и валил вину на что угодно, только не на косячного программиста. Вообще-то, при попытке залить прошивку с ошибкой, IDE вначале спросит - "действительно хотите загрузить с ошибкой компиляции"? А та галочка работает так: встретив первую ошибку компиляции (красный кружочек), дальнейшую сборку проводить не будет. А вот загрузка прошивки - это уже другая фаза. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RusikOk 1 10 июля, 2023 Опубликовано 10 июля, 2023 · Жалоба так объясните мне как можно не скомпилированную прошивку загрузить в контроллер? и да оно ничего не спрашивает. я просто вижу в логе кучу красных строк, но прошивка залетает в контроллер. а вот при следующей компиляции уже выскакивает модльное окно которое просит исправить ошибки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 10 июля, 2023 Опубликовано 10 июля, 2023 · Жалоба 2 часа назад, EdgeAligned сказал: Вообще-то, при попытке залить прошивку с ошибкой, IDE вначале спросит - "действительно хотите загрузить с ошибкой компиляции"? Назовите нам компилятор, который всё же создаёт загрузочный образ, при наличии хотя бы одной ошибки компиляции? А то что-то не верится в существование такового. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 35 10 июля, 2023 Опубликовано 10 июля, 2023 · Жалоба 2 minutes ago, jcxz said: Назовите нам компилятор, который всё же создаёт загрузочный образ, при наличии хотя бы одной ошибки компиляции? А то что-то не верится в существование такового. Да остается у него образ от последней удачной компиляции. Он его и грузит. Сделать Clean ... и Build. И не будет никаких прошивок. Какую то хрень обсуждаете. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 10 июля, 2023 Опубликовано 10 июля, 2023 · Жалоба 4 минуты назад, x893 сказал: Да остается у него образ от последней удачной компиляции. Он его и грузит. Сделать Clean ... и Build. И не будет никаких прошивок. Какую то хрень обсуждаете. Обсуждаем то, что написано. А написано было следующее: 2 часа назад, EdgeAligned сказал: залить прошивку с ошибкой "Образ от последней удачной компиляции", это не "образ с ошибкой компиляции". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться