-
- В стартапе инициализация стека так как не все отладчики автоматом его выставляют при загрузке как это делает ядро. По хорошему, под условную компиляцию на дебаг её надо. - VladislavS.(16.09.2020 07:18)
- Забыл что хотел: стартап можно написать на C, на ограниченном его
подмножестве, которое не полагается на библиотеку вообще, не
полагается на инициализацию неавтоматических (статических,
глобальных) переменных. Нужно смотрет дизассемблер когда пишешь,
чтоб не наткнуться на библиотечные функции. Их запросто вызовет
простое деление. С библиотечными функциями проблема потому, что они
могут требовать инициализации чего-либо и при проверке CRC это
будет глупо выглядеть (весь fk0легенда(53 знак., 11.09.2020 18:45)
- Дизассемблером в этом контексте я как раз вчера занимался.
Контрольные суммы где храните, как считаете и запихиваете в код? evgeniy1294(120 знак., 11.09.2020 19:21)
- См. ниже. Контрольный код хранится где-то в середине прошивки,
вставляется туда через двойнную линковку и перекомпиляцию файлика с
контрольной суммой после её подсчёта (на PC для чего с помощью
objdump ELF превращается в BIN и самодельная программа считает
CRC). A потом полученный второй раз BIN программируется
бутлоадером. Вообще workflow такой: fk0легенда(1287 знак., 12.09.2020 00:48, ссылка, ссылка)
- Добавил работу с аппаратным калькулятором crc32 в либину, пока
только для stm32f407, заодно сделал полностью софтовую реализацию
этого же алгоритма. Из готового софта для расчета нашел только
srecord - evgeniy1294(15.09.2020 23:46, ссылка)
- а фрагментами можно считать ? ну типа загрузил с внешнего
интерфейса 1кб, посчитал для него, сохранил полином, загрузил
следующие продолжил с известным полиномом и так до конца файла ? - Aleksey_75(16.09.2020 00:11)
- У себя я это учитывал, есть флаг сброса в параметрах функции. - evgeniy1294(16.09.2020 00:17)
- ) а разве аппаратный crc32 stm32 умеет работать "левым" полиномом ?
разве не только с 0x04C11DB7 ??? я только по этой причине ушел на
софтверный - Aleksey_75(16.09.2020 00:21)
- На 407 нет, stm32f7xx уже умеет: "Alternatively, uses fully
programmable polynomial with programmable size (7, 8, 16, 32 evgeniy1294(100 знак., 16.09.2020 00:28)
- это клево! но под мои задачи даже f4 многовато, кроме прожектов где
нужно 3 кана.. поэтому пользую табличный софтверный, ксати и AES у
меня примерно по такому принципу шифруется/дешифруется - Aleksey_75(16.09.2020 00:28)
- stm32g0 умеет, st пихает такой crc в камни с 2015г: f7, h7, g0, g4
(l4 и l5 не помню). И aes128/256 в них есть. - evgeniy1294(16.09.2020 00:35 - 00:37)
- с G серией пока не работал, но заглядываюсь - Aleksey_75(16.09.2020 00:37)
- stm32g0 умеет, st пихает такой crc в камни с 2015г: f7, h7, g0, g4
(l4 и l5 не помню). И aes128/256 в них есть. - evgeniy1294(16.09.2020 00:35 - 00:37)
- это клево! но под мои задачи даже f4 многовато, кроме прожектов где
нужно 3 кана.. поэтому пользую табличный софтверный, ксати и AES у
меня примерно по такому принципу шифруется/дешифруется - Aleksey_75(16.09.2020 00:28)
- На 407 нет, stm32f7xx уже умеет: "Alternatively, uses fully
programmable polynomial with programmable size (7, 8, 16, 32 evgeniy1294(100 знак., 16.09.2020 00:28)
- ) а разве аппаратный crc32 stm32 умеет работать "левым" полиномом ?
разве не только с 0x04C11DB7 ??? я только по этой причине ушел на
софтверный - Aleksey_75(16.09.2020 00:21)
- У себя я это учитывал, есть флаг сброса в параметрах функции. - evgeniy1294(16.09.2020 00:17)
- а фрагментами можно считать ? ну типа загрузил с внешнего
интерфейса 1кб, посчитал для него, сохранил полином, загрузил
следующие продолжил с известным полиномом и так до конца файла ? - Aleksey_75(16.09.2020 00:11)
- хм! у меня примерно также но без всяких умных слов Aleksey_75(613 знак., 12.09.2020 01:02)
- Да, но у тебя пришлось делать заголовок в котором хранить это всё. И проверяется всё внешним бутлоадером. А у меня программа проверяет сама себя (бутлоадер ничего не проверяет, он проверяет, что на векторе резета не FFFFFF и делает туда jump, предварительно включив ватчдог). - fk0легенда(12.09.2020 01:30)
- Добавил работу с аппаратным калькулятором crc32 в либину, пока
только для stm32f407, заодно сделал полностью софтовую реализацию
этого же алгоритма. Из готового софта для расчета нашел только
srecord - evgeniy1294(15.09.2020 23:46, ссылка)
- См. ниже. Контрольный код хранится где-то в середине прошивки,
вставляется туда через двойнную линковку и перекомпиляцию файлика с
контрольной суммой после её подсчёта (на PC для чего с помощью
objdump ELF превращается в BIN и самодельная программа считает
CRC). A потом полученный второй раз BIN программируется
бутлоадером. Вообще workflow такой: fk0легенда(1287 знак., 12.09.2020 00:48, ссылка, ссылка)
- Дизассемблером в этом контексте я как раз вчера занимался.
Контрольные суммы где храните, как считаете и запихиваете в код? evgeniy1294(120 знак., 11.09.2020 19:21)
- Стартап делает гораздо больше вещей. Вообще отчасти это задача
операционной системы: как-то разместить в памяти аргументы
программы, переменные окружения, и передать указатели на них. И
заодно сделать доступной в адресном пространстве программу
(загрузить её, библиотеки, релоцировать...), стек, настроить
регистры... C-стартап должен подготовить "рантайм" к работе и
инициализировать C-библиотеку.... fk0легенда(2374 знак., 11.09.2020 18:42, ссылка, ссылка)
- BSS и Data у меня обнуляются и копируются из flash в ram
соответственно, надо перед ними инициализацию pll воткнуть.
Статические конструкторы вызываются через __libc_init_array(); evgeniy1294(961 знак., 11.09.2020 19:16)
- Чего это стандартные файлы -- лишние? Во-первых они по стандарту
должны быть. Просто вот должны и всё. Их кто-то может попытаться
использовать. Что-нибудь в stderr записать. По крайней мере упасть
не должно. Вообще stdout/stderr в контроллере удобно использовать
для ведения лога (а отлаживать как -- по светодиодику что ли?) В
более сложных и логгер более сложный (см. ниже)... fk0легенда(1844 знак., 12.09.2020 01:27 - 01:36, ссылка, ссылка)
- опять плюсы ((( поубивабы! - Aleksey_75(12.09.2020 01:30)
- В плюсах можно сделать шикарнейший логгер. Во-первых не занимающий
програмной памяти или памяти данных (оперирует адресами текста в
ELF-файле, сам текст в Flash -- отсутствует), во-вторых работающий
быстро, в-третьих умеющий распечатывать enum'ы и другие типы,
в-третьих выдающий компактный бинарный вывод. Который можно имея
ELF файл от этой версии прошивки восстановить в текст. В языке "C"
лучшее что можно сделать -- только первый пункт и последний, причём
последний fk0легенда(2074 знак., 12.09.2020 02:10, ссылка, ссылка)
- ну у меня есть логгер, без каких либо printf... все id и индексами,
и прога парсер ..... А вот с плюсами у меня не ладится, раз 10
пытался войти и все заканчивалось осознанием того что плюсов там
нет совсем )) - Aleksey_75(12.09.2020 02:33)
- Ты не с того конца C++ рассматриваешь. Обычно сразу начинают с ООП.
Это не верно. C++ -- мультипарадигмальный язык программирования.
ООП -- это не краеугольный камень и не серебряная пуля. Но даже ООП
имеет преимущества, т.к. позволяет упорядочить архитектуру,
уменьшить число ошибок. Я бы во главу угла поставил
метапрограммирование и программирование в пространстве типов, и то,
что C++ позволяет получить высокоэффективный код, что критично для
embedded. И уменьшить число fk0легенда(3757 знак., 12.09.2020 03:28)
- Вы правильно заменили "++ это не серебряная пуля!" И видимо у меня до сих пор не было прожектов где все необходимое невозможно было бы замутить на простом си! Но у меня перед глазами есть ахринительный пример, порядка двух лет назад в одной достаточно известной (в своей области) конторе , один безумный чувак сказал что - А. следующий проект будет на оси (stm32f412), В. писать будем на плюсах.... Расписали роадмап на год с лишнем..... я этим проектом не занимался и буквально Aleksey_75(584 знак., 12.09.2020 04:09)
- Ты не с того конца C++ рассматриваешь. Обычно сразу начинают с ООП.
Это не верно. C++ -- мультипарадигмальный язык программирования.
ООП -- это не краеугольный камень и не серебряная пуля. Но даже ООП
имеет преимущества, т.к. позволяет упорядочить архитектуру,
уменьшить число ошибок. Я бы во главу угла поставил
метапрограммирование и программирование в пространстве типов, и то,
что C++ позволяет получить высокоэффективный код, что критично для
embedded. И уменьшить число fk0легенда(3757 знак., 12.09.2020 03:28)
- ну у меня есть логгер, без каких либо printf... все id и индексами,
и прога парсер ..... А вот с плюсами у меня не ладится, раз 10
пытался войти и все заканчивалось осознанием того что плюсов там
нет совсем )) - Aleksey_75(12.09.2020 02:33)
- В плюсах можно сделать шикарнейший логгер. Во-первых не занимающий
програмной памяти или памяти данных (оперирует адресами текста в
ELF-файле, сам текст в Flash -- отсутствует), во-вторых работающий
быстро, в-третьих умеющий распечатывать enum'ы и другие типы,
в-третьих выдающий компактный бинарный вывод. Который можно имея
ELF файл от этой версии прошивки восстановить в текст. В языке "C"
лучшее что можно сделать -- только первый пункт и последний, причём
последний fk0легенда(2074 знак., 12.09.2020 02:10, ссылка, ссылка)
- опять плюсы ((( поубивабы! - Aleksey_75(12.09.2020 01:30)
- Чего это стандартные файлы -- лишние? Во-первых они по стандарту
должны быть. Просто вот должны и всё. Их кто-то может попытаться
использовать. Что-нибудь в stderr записать. По крайней мере упасть
не должно. Вообще stdout/stderr в контроллере удобно использовать
для ведения лога (а отлаживать как -- по светодиодику что ли?) В
более сложных и логгер более сложный (см. ниже)... fk0легенда(1844 знак., 12.09.2020 01:27 - 01:36, ссылка, ссылка)
- BSS и Data у меня обнуляются и копируются из flash в ram
соответственно, надо перед ними инициализацию pll воткнуть.
Статические конструкторы вызываются через __libc_init_array(); evgeniy1294(961 знак., 11.09.2020 19:16)
- 1. У GCC для TI TM4C так было уже хз сколько времени как.
Собственно у ARMа нет ничего, что нужно было бы обязательно делать
через асм в инициализации. lloyd(139 знак., 11.09.2020 18:18)
- С внешней оперативкой сложнее. Так как она мапится в общее адресное пространство, sp может указывать и в нее, а запись ResetHandler будет мешать. evgeniy1294(94 знак., 11.09.2020 18:31)