-
- Не понял вопроса. В линуксах всегда PIC код для библиотек (они ж в разных процессах могут по разным адресам попадать). Доступ к данным и коду ведётся через GOT (и PLT для функций). GOT конструируется в момент загрузки (и он большой!). Адрес GOT fk0(1500 знак., 26.07.2016 09:18)
- У AVR все коды позиционно независимые, поскольку там все переходы относительные. :) А у вас какой МК? - Ксения(26.07.2016 09:06)
- Не все переходы относительные - есть jmp по фиксированному адресу. - Apтём(26.07.2016 13:05)
- Платформа Hercules. RM46L852. - _VVB(26.07.2016 09:15,
)
- А что это у вас такое, что врачи юзают? Да и МК с защитой от ошибок по высшему разряду. Какая-то система жизнеобеспечения? - Ксения(26.07.2016 11:10)
- вот это www.triton.ru/tovary/apparaty-iskusstvennoi-ventilyacii-legkih/ - _VVB(26.07.2016 11:16,
)
- вот это www.triton.ru/tovary/apparaty-iskusstvennoi-ventilyacii-legkih/ - _VVB(26.07.2016 11:16,
- А что это у вас такое, что врачи юзают? Да и МК с защитой от ошибок по высшему разряду. Какая-то система жизнеобеспечения? - Ксения(26.07.2016 11:10)
- Не совсем. libc библиотека. В библиотеке нет привязки к адресам. Библиотека только компилируется. Линкер привязывает к адресам. Поменять параметр в скрипте линкера и все. - framer(26.07.2016 08:59)
- В библиотеке может быть не позиционно-независимый код. - fk0(26.07.2016 09:05)
- Нужна среда исполнения такого кода уже записанная во флэш, собственно всё. Остальное решается настройками компилятора и линкера. - Xитpый Kитaeц(26.07.2016 08:58)
- Овчинка выделки не стоит. Программа малюсенькая и в обозримом будущем таких программ не предвидится. _VVB(3097 знак., 26.07.2016 09:45,
)
- Кстати, где-то там надо предусмотреть аварийный режим на случай, если враги отключат липистричество во время перепрошивки. - SciFi(26.07.2016 10:15)
- Обновлением прошивки будут заниматься сервисные инженеры, не пользователи (врачи). Есть аккумулятор. В случае сбоя ситуация возвратится к имеющейся на данный момент: аппарат вскрывается и спокойно перепрограммируется. Я считаю вероятность сбоя _VVB(44 знак., 26.07.2016 10:29,
)
- Это многое меняет. - SciFi(26.07.2016 10:32)
- Обновлением прошивки будут заниматься сервисные инженеры, не пользователи (врачи). Есть аккумулятор. В случае сбоя ситуация возвратится к имеющейся на данный момент: аппарат вскрывается и спокойно перепрограммируется. Я считаю вероятность сбоя _VVB(44 знак., 26.07.2016 10:29,
- То есть перемещаемый код, чтобы не собирать загрузчик 10 раз с разными смещениями? Это называется удаление гланд через #опу. Не надо этого делать. 10 раз собирается легко. Для этого есть make и прочее скриптование. - SciFi(26.07.2016 10:11)
- Я пока что использую вариант с жёстко прописанным адресом исполнения "загрузчика" в скрипте линкера без PIC. А что Вы предлагаете? _VVB(365 знак., 26.07.2016 10:15,
)
- Во-первых, проект один. Меняющееся число в скрипте линкера - это аргумент. Скрипт сборки вызывается 10 раз с разными аргументами. PIC сулит слишком много геморроя, который не оправдывается этой мелкой эстетической заморочкой. - SciFi(26.07.2016 10:18)
- Спасибо за дельный совет. Я не использовал командные скрипты, меняющие исходники, видимо, настала пора. - _VVB(26.07.2016 10:25,
)
- Скорее всего есть способ подсовывать линкеру меняющееся число через командную строку, а не через файл. - SciFi(26.07.2016 10:31)
- Буду признателен, если подскажете. Я в первую очередь рыл как раз в эту сторону, неудачно. - _VVB(26.07.2016 10:40,
)
- Можно попробовать разбить скрипт линкера на 2 части: маленькая изменяемая часть (10 экземпляров) и большая неизменная. Загружать их оба (-T file.ld) - это можно. - SciFi(26.07.2016 10:56)
- А что, вполне себе идея. - _VVB(26.07.2016 11:02,
)
- А что, вполне себе идея. - _VVB(26.07.2016 11:02,
- Можно попробовать разбить скрипт линкера на 2 части: маленькая изменяемая часть (10 экземпляров) и большая неизменная. Загружать их оба (-T file.ld) - это можно. - SciFi(26.07.2016 10:56)
- Буду признателен, если подскажете. Я в первую очередь рыл как раз в эту сторону, неудачно. - _VVB(26.07.2016 10:40,
- Скорее всего есть способ подсовывать линкеру меняющееся число через командную строку, а не через файл. - SciFi(26.07.2016 10:31)
- Спасибо за дельный совет. Я не использовал командные скрипты, меняющие исходники, видимо, настала пора. - _VVB(26.07.2016 10:25,
- Во-первых, проект один. Меняющееся число в скрипте линкера - это аргумент. Скрипт сборки вызывается 10 раз с разными аргументами. PIC сулит слишком много геморроя, который не оправдывается этой мелкой эстетической заморочкой. - SciFi(26.07.2016 10:18)
- Я пока что использую вариант с жёстко прописанным адресом исполнения "загрузчика" в скрипте линкера без PIC. А что Вы предлагаете? _VVB(365 знак., 26.07.2016 10:15,
- Опять что-то непонятное изобрёл, вместо давно известной практики: зашивают целиком новую прошивку и не занимаются позиционно-независимым размещением сегментов кода в flash. - fk0(26.07.2016 10:06)
- Слушаю внимательно. Можно подробнее? Каким образом "зашить целиком новую прошивку" без доступа к JTAG? - _VVB(26.07.2016 10:09,
)
- Через SFR-регистры. У данного МК нельзя перепрограммировать flash? Неизменной частью должен являться лишь маленький загрузчик объёмом ~4..16 кБайт, который получает управление после старта МК. - fk0(26.07.2016 10:17)
- Добавлю. Получает управление, проверяет целостность себя, проверяет причину входа, в зависимости от которого 1) ожидает загрузки ПО, 2) проверяет целостность целевого ПО 3)запускает целевое ПО, которое о загрузчике знает как максимум адрес старта, Xитpый Kитaeц(66 знак., 26.07.2016 10:33)
- Если блок лежит на столе -- никаких проблем. Анализ USB mass storage (энумерация) занимает несколько секунд после запуска платы CAN-Ethernet, которая тоже запускается несколько секунд. Это значит, что по первому включению маленькие загрузчики всех _VVB(102 знак., 26.07.2016 10:39,
)
- В UART/CAN шлётся в цикле волшебная последовательность байт. Анализ которой занимает 100мс. Если за 100 мс встречена -- обновление, иначе нормальная работа (только не 3 байта, а 64, не встречающиеся в нормальном обмене). - fk0(26.07.2016 11:26)
- Ну елки, это же просто рыба. Подумайте, когда целевое ПО запускает обновление самого себя, основная проблема - кто, что и как должен делать если что-то пошло не так и как это вписывается в проект в целом. При серийном производстве (массовая запись Xитpый Kитaeц(32 знак., 26.07.2016 11:08)
- Если блок лежит на столе -- никаких проблем. Анализ USB mass storage (энумерация) занимает несколько секунд после запуска платы CAN-Ethernet, которая тоже запускается несколько секунд. Это значит, что по первому включению маленькие загрузчики всех _VVB(102 знак., 26.07.2016 10:39,
- Разные блоки стартуют разное время. От сотен миллисекунд до десятков секунд. В это время шина CAN не будет полностью работоспособна. Кроме того, для наших систем жизнеобеспечения предусмотрен "быстрый рестарт" -- если блок перезапустился из-за _VVB(429 знак., 26.07.2016 10:23,
)
- Добавлю. Получает управление, проверяет целостность себя, проверяет причину входа, в зависимости от которого 1) ожидает загрузки ПО, 2) проверяет целостность целевого ПО 3)запускает целевое ПО, которое о загрузчике знает как максимум адрес старта, Xитpый Kитaeц(66 знак., 26.07.2016 10:33)
- Через SFR-регистры. У данного МК нельзя перепрограммировать flash? Неизменной частью должен являться лишь маленький загрузчик объёмом ~4..16 кБайт, который получает управление после старта МК. - fk0(26.07.2016 10:17)
- Слушаю внимательно. Можно подробнее? Каким образом "зашить целиком новую прошивку" без доступа к JTAG? - _VVB(26.07.2016 10:09,
- Кстати, где-то там надо предусмотреть аварийный режим на случай, если враги отключат липистричество во время перепрошивки. - SciFi(26.07.2016 10:15)
- Овчинка выделки не стоит. Программа малюсенькая и в обозримом будущем таких программ не предвидится. _VVB(3097 знак., 26.07.2016 09:45,