А как можно объявить массив, что бы компилятор разместил его во флеш памяти, а не SRAM? static const uint16_t image_data[80*64]; objdump -x hello_world.elf | grep image_data 2000044c l .bss 00002800 image_data речь про STM32
А как можно объявить массив, что бы компилятор разместил его во флеш памяти, а не SRAM? static const uint16_t image_data[80*64]; objdump -x hello_world.elf | grep image_data 2000044c l .bss 00002800 image_data речь про STM32
оптимально было бы Powerline технология, но я не нашол не одного модуля или хотя бы схем, а так только wifi Zeegbe лучше... Читать далее
Коллеги, в моем районе частных домов бывают скачки напряжения. Поставил реле напряжения, что бы сберечь электробытовые приборы,... Читать далее
Извините, тут нубский вопрос от меня. Научился я наконец-то работать с TFT дисплеем 128x160 на своей голубой таблетке через... Читать далее
Коллеги, форд Мондео 4, климат. 2011г. Не работает вентилятор печкт. Нужно добраться до резистора печки и разъема вентилятора.... Читать далее
дело в том что там же было вещание на ам,качества никакого,а если пытатся сделать качество то в тех диапазонах можно было... Читать далее
мля 1 соглосование уровней 2 лучше подтянуть RTS на логичискую ногу и кинуть на нее 1 3 Лучше еще CTS и сбрасывать ее перед... Читать далее
Комментарии: 15
Hordiienko
Static inline
Cyberzx
inline переменных в С нет. это же С++11 обнаружил, что если объявить с инициализатором static const uint16_t image_data[80*64] = {0}; то размещает во флеше. но если убрать const, то опять в SRAM
Boris
потому что для неконстант это .data, а для констант .text
Cyberzx
Но я же ведь могу писать во флеш? Просто не так быстро
Boris
вопрос не в том можешь или нет, вопрос в секциях обычно секция констант кладётся после секции кода
Cyberzx
Спасибо. вот так размешает правильно uint16_t image_data[160*128] attribute ((section (".rodata"))); но, видимо, что бы было совсем правильно, надо ещё похачить ld скрипт и сделать отдельную секцию, а не юзать rodata
Boris
ну вообще да, т.к. потому могут быть проблемы
Igor
А как неинициализированный массив разместить во флеше, а в рантайме инициализировать; Компилятор разместит во флеш если объявить инициализированный массив как const. Если Вам нужно сохранять в массиве настройки то смотрите в сторону чтения-записи флеш. Можно объявить структуру настроек и в нее поместить массив. Отдельная процедура на чтение структуры из флеша в память и обратно. При этом сама структура будет обычной, не const
Cyberzx
Да я просто хотел фреймбуфер для экрана где-то разместить. Но по факту флеш это ROM память. Запись туда хоть и не вызывает прерывания, но ни к чему не приводит.
Igor
фреймбуфер во флеше? А как в него писать собрались? Или он статический? Во флеше я размещал шрифты. Там каждому символу свой массив констант. А фрейм-буфер - это должно быть озу и желательно скоростное и с возможностью вывода на дисплей по ДМА. Мне понравилось FreeRTOS использовать. Одна задача буфер готовит а вторая управляет ДМА выводом. Ну и конечно SPI будет узким местом в любом случае. Интерфей последовательный. Т.е. 1 байт передается как минимум за 8 тактов CLK
Cyberzx
Да я только неделю эмбедедом занимаюсь. Ещё не во всём разбираюсь :) Завёл маленький буфер в SRAM. Пишу туда, потом заливаю по DMA и так три раза. Вроде норм
Igor
Все получится :) Я тоже совсем недавно стал осваивать stm32. Тут главное терпение и доки читать внимательнее
Anonim
ох вообще если нет памяти, но хочется +- нормально работать, то предлагаю подход растеризации держать в памяти список примитивов заполнять мелкий фреймбуффер из 8 строк пикселей, например
Cyberzx
анимация получилась даже с float point арифметикой) хотя видно, что я экран делю на три части
Anonim
выгружать по dma, пока выгружается - подготавливать следующие 8 строк