LINUX.ORG.RU

Куда пропадает static const массив?

 , ,


0

1

https://github.com/speedcontrols/ac_sc_grinder/blob/4cc29e5b15530b104045d4c02...

Есть проесть под stm32 в platformio. Объявляю массив констант. Все собирается. При этом в выхлопе размер PROGMEM/DATA не меняется никак. Размер .bin/.elf тоже. Ради эксперимента пробовал сильно увеличить размер массива - изменений нет.

Что я делаю не так?

Массив юзается, вроде оптимизатор его выкидывать не должен.

★★★★★

Массив юзается

Как юзается? Насколько большой массив? Может оно не добавляет места для него, ибо всё блоками, и массив меньше блока, и в нем место есть. Кстати, массив в elf может представляться в нечитаемой/неузнаваемой форме...

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

Блин, код же выложен. Ну посмотри как юзается.

Размер до 10K элементов увеличивал. BIN 7k c хвостиком и не растет.

Vit ★★★★★
() автор топика
Ответ на: комментарий от Vit

Блин, код же выложен. Ну посмотри как юзается.

Ссылка ведет на заголовочный файл, и вряд ли кто-то станет анализировать код (и makefile-ы) всего репозитория ради ответа на твой вопрос. Если хочешь проверить, выбрасывается ли массив - вставь код его печати в main() и посмотри, увеличится ли размер бинаря.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Ты был прав. Если воткнуть печать в main, то размер бинарника меняется правдоподобным образом (пробовал размер и тип массива крутить).

Видимо косяк в том, как прикручивали CubeMX.

https://github.com/speedcontrols/ac_sc_grinder/blob/dev/src/main.cpp
https://github.com/speedcontrols/ac_sc_grinder/blob/dev/src/hw_init.h

Похоже выпиливаются обработчики прерываний, на которых висит весь код.

Код инициализации железа, выдергивали ручками из того поноса который генерит CubeMX. Видимо что-то пропустили. Идеи есть?

Инструкция по выдергиванию тут.

Vit ★★★★★
() автор топика
Ответ на: комментарий от tailgunner

Нарыл. Что-то с хендлером таймера. Если код из него перекинуть в хендлер АЦП, то размер правдоподобный становится.

Будем разбираться.

Vit ★★★★★
() автор топика
Ответ на: комментарий от Vit

Блин, код же выложен. Ну посмотри как юзается

Прошу пардона, не увидел. tailgunner меня опередил, по хедеру не видно было как он юзается. К тому же всего 1024 байт.

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от Vit

Не пользуйся калокубом, не уподобляйся ублюдским абдуринщикам!

anonymous
()

Очень тебе советую не тратить понапрасну память МК: для синусов/косинусов достаточно сохранить значения синуса в первой четверти.

И ни в коем случае не равноотстоящими значениями, а отстоящими в соответствии с заданной точностью. Бинарным поиском быстренько найдешь индекс, наиболее приближенный к искомому углу, а потом из таблицы получишь значение синуса или косинуса этого угла.

Я себе даже генератор такой штуки писал, где-то на гитхабе валяется.

anonymous
()

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

KivApple ★★★★★
()
Последнее исправление: KivApple (всего исправлений: 1)
Ответ на: комментарий от KivApple

Не то. Там инициализацию HAL-а дергали ручками, взяв код из старой версии. А в PlatformIO более свежая. Я уже все поправил, можно по истории посмотреть. Глюки ушли.

Vit ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.