KnightIgor 2 7 ноября, 2020 Опубликовано 7 ноября, 2020 · Жалоба 12 minutes ago, Arlleex said: Ну где где... А эту где брали? Фирма купила Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 61 7 ноября, 2020 Опубликовано 7 ноября, 2020 · Жалоба 18 minutes ago, KnightIgor said: Фирма купила Please contact your supplier. Но я уже запутался в этих надуманных проблемах. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KnightIgor 2 7 ноября, 2020 Опубликовано 7 ноября, 2020 · Жалоба 22 minutes ago, x893 said: Please contact your supplier. Но я уже запутался в этих надуманных проблемах. Фирма йок. Все досталось мне в наследство. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SII 0 8 ноября, 2020 Опубликовано 8 ноября, 2020 · Жалоба 6 hours ago, Сергей Борщ said: Даже развернуте объяснение на пальцах не все "гуру" осиливают. SII, процитируйте себя для самых невнимательных еще раз, выделив жирным текстом, курсивом, ядовито-синим цветом, что ли. А то вам еще две страницы будут приводить цитаты стандартов и интернета. Была такая мысля, но решил флуд не разводить. Кто хотел понять -- понял если не с первого раза, то хотя б со второго. 2 hours ago, KnightIgor said: Где взять, чтобы без ограничений? Так можно ж вполне официально скачать без всяких лицензий и использовать в качестве пробной -- Вам же пока что проверить надо. Вот если в новой версии всё работает, тогда можно подумать о покупке... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 61 8 ноября, 2020 Опубликовано 8 ноября, 2020 · Жалоба 8 hours ago, KnightIgor said: Фирма йок. Все досталось мне в наследство. Возьмите Windows VPS на месяц (10$), поставьте последнюю версию Keil, введите ключ и мучайте её. Это если так боитесь поставить её на своём локальном компьютере. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KnightIgor 2 8 ноября, 2020 Опубликовано 8 ноября, 2020 · Жалоба 5 hours ago, x893 said: Возьмите Windows VPS на месяц (10$), поставьте последнюю версию Keil, введите ключ и мучайте её. Это если так боитесь поставить её на своём локальном компьютере. Как-нибудь. А вот мой второй вопрос в процессе обсуждения остался незамечен: так все-таки, может ли компоновщик ld из пакета gcc генерировать символы без указания в скрипте? Если не ясно, о чем я, поясню: под KEIL, если я размещу константы в именованной секции, например, "INI_MAIN_TABLE", то в коде С я могу ссылаться на них через предопределенные имена в виде (void*)&INI_MAIN_TABLE$$Base - адрес начала, и (uint32_t)&INI_MAIN_TABLE$$Length - размер секции, и мне не нужно что-то писать в скрипте компоновщика. С ld такая штука не прошла. Мне пришлось ручками вписать в скрипт компоновщика эти вещи, причем я обнаружил, что .initable : { . = ALIGN(4); INI_MAIN_TABLE$$Base = .; KEEP (*(INI_MAIN_TABLE)) } >ROM INI_MAIN_TABLE$$Length = SIZEOF(.initable); работает, а вот моя изначальная попытка: .initable : { . = ALIGN(4); INI_MAIN_TABLE$$Base = .; KEEP (*(INI_MAIN_TABLE)) INI_MAIN_TABLE$$Length = . - INI_MAIN_TABLE$$Base; } >ROM не ругается, программа собирается, но под (uint32_t)&INI_MAIN_TABLE$$Length находится полная чушь, все летит к чертям. Ну ладно, первый вариант работает, и прекрасно. А вот необходимость явного указания символов в скрипте напрягает. Я чего-то не доглядел? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KnightIgor 2 8 ноября, 2020 Опубликовано 8 ноября, 2020 (изменено) · Жалоба 6 hours ago, x893 said: Возьмите Windows VPS на месяц (10$), поставьте последнюю версию Keil, введите ключ и мучайте её. Это если так боитесь поставить её на своём локальном компьютере. В общем, скачал 6.6 компилятора и поставил ее под KEIL. Сначала он ругался на лицензию, но вот это помогло. К счастью, в настройках KEIL есть возможность указать вообще и для проекта в частности, какой компилятор использовать, поэтому можно экспериментировать. Так вот, пока собрать с помощью 6.6 не удалось, т.к. компилятор... не находит файлы! Диагностика типа "не могу найти файл srcadc.c", который фактически есть, но находится в src\adc.c. То есть, что-то не срабатывает при вызове компилятора, и обратная косая "проглатывается", из-за чего src\adc.c "плавно превращается" (RIP Жванецкий) в "srcadc.c". Буду смотреть дальше. Изменено 8 ноября, 2020 пользователем KnightIgor Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 143 8 ноября, 2020 Опубликовано 8 ноября, 2020 · Жалоба 39 минут назад, KnightIgor сказал: Я чего-то не доглядел? Погуглил - все верно: надо добавлять свои символы в скрипт. Тут описана недокументированная возможность, но она не работает с именами секций, содержащими точки. Про вашу изначальную попытку: я определяю длину приложения так: .text : { _image_start = .; KEEP(*(.isr_vector)) LONG((_image_end - _image_start) / 4); /* application size, in 4-byte words */ .......... } > TEXT ...... .text.crc : { . = . + 4; _image_end = .; } > TEXT В таком виде оно у меня работает. Трудно сказать, почему у вас не работает, надо внимательно изучать .map. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KnightIgor 2 8 ноября, 2020 Опубликовано 8 ноября, 2020 · Жалоба 8 minutes ago, Сергей Борщ said: Погуглил - все верно: надо добавлять свои символы в скрипт. Не всё коту масленица. По поводу скрипта. LONG((_image_end - _image_start) / 4); /* application size, in 4-byte words */ Я, кажется, понял. Эта команда РАЗМЕЩАЕТ слово в образе, а не создает символ. Наверное, "моя" команда INI_MAIN_TABLE$$Length = . - INI_MAIN_TABLE$$Base; Также размещает слово в секции, а не создает символ, равный чему-то там. Хотя я не уверен. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 143 8 ноября, 2020 Опубликовано 8 ноября, 2020 · Жалоба 1 час назад, KnightIgor сказал: Наверное, "моя" команда INI_MAIN_TABLE$$Length = . - INI_MAIN_TABLE$$Base; Также размещает слово в секции, а не создает символ, равный чему-то там. Хотя я не уверен. Нет, тут все веселее. Добавил к себе в скрипт такие строки: text_length0 = .; text_length1 = text_length0 - _image_start; text_length2 = . - _image_start; } > TEXT text_length3 = .; text_length4 = . - _image_start; Наблюдаю в .map: .text 0x0000000008002800 0x18b60 0x0000000008002800 _image_start = . ........... 0x000000000801b360 . = ALIGN (0x4) 0x000000000801b360 text_length0 = . 0x000000000801b360 text_length1 = (text_length0 - _image_start) 0x000000000801b360 text_length2 = (. - _image_start) 0x000000000801b360 text_length3 = . 0x0000000000018b60 text_length4 = (. - _image_start) Чешу репу. Что-то я об этом читал в документации на ld, попробую найти. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 143 8 ноября, 2020 Опубликовано 8 ноября, 2020 · Жалоба 57 минут назад, Сергей Борщ сказал: Чешу репу Вроде накопал. Попробуйте так: .initable : { . = ALIGN(4); INI_MAIN_TABLE$$Base = ABSOLUTE(.); KEEP (*(INI_MAIN_TABLE)) INI_MAIN_TABLE$$Length = . - INI_MAIN_TABLE$$Base; } >ROM Добавлено: или так: .initable : { . = ALIGN(4); INI_MAIN_TABLE$$Base = .; KEEP (*(INI_MAIN_TABLE)) INI_MAIN_TABLE$$Length = ABSOLUTE(. - INI_MAIN_TABLE$$Base); } >ROM Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KnightIgor 2 8 ноября, 2020 Опубликовано 8 ноября, 2020 (изменено) · Жалоба 32 minutes ago, Сергей Борщ said: Вроде накопал. Попробуйте так: .initable : { . = ALIGN(4); INI_MAIN_TABLE$$Base = ABSOLUTE(.); KEEP (*(INI_MAIN_TABLE)) INI_MAIN_TABLE$$Length = . - INI_MAIN_TABLE$$Base; } >ROM В принципе, моя конструкция: .initable : { . = ALIGN(4); INI_MAIN_TABLE$$Base = .; KEEP (*(INI_MAIN_TABLE)) } >ROM INI_MAIN_TABLE$$Length = SIZEOF(.initable); Мне логически и визуально нравится больше и работает без ABSOLUTE(). Собственно, я считаю эту проблему решенной. Основной вопрос, что стоял передо мной, делает ли ld что-то самостоятельно, как это делает KEIL, или таки надо всё ручками. Частности вылезли позже. Вообще, неспособность ld генерировать символы "по-умолчанию" меня расстраивает, т.к. разрушает мою концепцию модульной сборки программы. В моих проектах есть модули, которые обеспечивают приложению ту или иную функциональность простым включением в или исключением их исходника из компиляции. Чтобы модули сами себя инициализировали, они сами макросом включались в таблицу инициализации в именованной секции, и мне не надо было добавлять в части инициализации программы явные вызовы к этим модулям. Так же эти модули подключались в диспетчеру. Ну, допустим, поскольку такие секции едины в приложении, их можно раз и навсегда прописать в .*ld. Но у меня есть модули, которые общаются между собой посредством подобных таблиц. Такие таблицы создавались автоматически без прописывания в скрипт. Теперь, надо это делать ручками... Еще вопрос к гуру. Это, скорее, касается Эклипсы вообще и ST32CubeIDE в частности: есть возможность устанавливать >порядок< компиляции и сборки? Для сравнения и понимания: под KEIL IDE можно перетягивать файлы в дереве проекта и, тем самым, определять порядок сборки. STM32CubeIDE мне файлики по алфавиту упорядочивает. Навскидку возможности IDE пересортировать файлы не нашёл. Только не надо рекомендовать файлы переименовывать! Изменено 8 ноября, 2020 пользователем KnightIgor Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 245 8 ноября, 2020 Опубликовано 8 ноября, 2020 · Жалоба 4 часа назад, KnightIgor сказал: Это, скорее, касается Эклипсы вообще и ST32CubeIDE в частности: есть возможность устанавливать >порядок< компиляции и сборки? Зачем??? Работоспособность программы не должна зависеть от порядка сборки её исходных файлов. Если у Вас не так - это надо исправлять, а не искать костыли. Современные компиляторы вообще могут компилировать в несколько потоков параллельно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KnightIgor 2 10 ноября, 2020 Опубликовано 10 ноября, 2020 · Жалоба On 11/8/2020 at 10:04 PM, jcxz said: Зачем??? Работоспособность программы не должна зависеть от порядка сборки её исходных файлов. Если у Вас не так - это надо исправлять, а не искать костыли. Современные компиляторы вообще могут компилировать в несколько потоков параллельно. Вопросом на вопрос - была преррогатива М. Жванецкого (RIP). Есть ответ по существу? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 39 10 ноября, 2020 Опубликовано 10 ноября, 2020 · Жалоба 25 минут назад, KnightIgor сказал: Есть ответ по существу? Порядок сборки модулей программы не должен влиять на её работу. Если это не так - ищите ошибку. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться