Чтение из массива данных STM32F103
- Войдите на сайт для отправки комментариев
Втр, 10/09/2019 - 20:02
Всем привет! Столкнулся с проблемой. Есть массив (буфер) вида:
byte bitmap[1248] = { 0x00,0x00,0x00,0x00,0x00.... );
побайтовое чтение произвожу командой:
Value = bitRead(bitmap[l*16+15-i], j) != 0 ? HIGH : LOW;
Если использовать Ардуино то все нормально работает, но у Ардуино очень мало ОЗУ, Буфер максимум может занимать 2 килобайта, а у Ардуино (Uno, и ей подобных) всего 2 Кб. ОЗУ.
Я решил использовать плату STM32F103C8T6. Поддержку STM сделал, залил загрузчик, код компилируется и прошивается. Но команда Value = bitRead(bitmap... возвращает только нули и только 200 чтений (или около того). То есть делает 200 раз Value = bitRead() после чего программа намертво зависает.
Почему не происходит чтение из массива и почему зависание происходит?
Вероятно, напутали в циклах.
forfrends -
во-первых, то что вы привели - это не "побайтовое", а "побитное" чтение массива.
Во-вторых, неплохо было бы привести более подробный код, что именно и как вы читаете.
И последнее - если это битмап и выводите вы ее на экран - скорее всего работать побитно не только нет нужды. но еще и вредно. Большинство экранов имеют байтовую адресацию и заполнять их точками - это как копать котлован детским совочком.
forfrends, ну начнём с того, макросы для AVR совсем не обязаны работать на stm32. Если аддон от Роджера Кларка, то там есть макрос с аналогичной функцией bb_peri_get_bit(адрес, бит)
Пытаюсь разобраться в работе термопринтера от кассового аппарата. Отдельно созданная тема: http://arduino.ru/forum/apparatnye-voprosy/termoprinter-iz-starogo-terminala-kassovogo-apparata
Решил переехать из ПроМини на STM. Код не менял, только пины переназначил. Скетч (смотреть функцию processPrintBitmap() ):
Кстати, если не делать побитовое чтение (pinValue = bitRead(bitmap[l*16+15-i], j) != 0 ? HIGH : LOW;), а присваивать случайное значение переменной (pinValue = !pinValue) то код работает нормально и печатается "сетка" из точек. А вот с побитовым чтением - никак.
Если есть мысли по оптимизации кода, то буду благодарен! А то печатает медленно.
Как Вы думаете, чему равен индекс в массиве при l=0 и i=47?
andriano, я вас понял. Как бы это исправить... Как только я пытаюсь в этом что-то менять, то печать прекращается (выходит пустая лента). Ок. Попробую оптимизировать.
andriano, я вас понял. Как бы это исправить... Как только я пытаюсь в этом что-то менять, то печать прекращается (выходит пустая лента). Ок. Попробую оптимизировать.
причем тут "оптимизировать"?? - о какой оптимизации речь, когда вы лезете в отрицательные индексы массива? - у вас алгоритм печати совершенно неверно написан
Попробуйте обьяснить, что значат все эти вложенные циклы - один от 0 до78, другой до 48, третий до 12, четвертый до восьми... Вы что такое печатаете-то, у вас битмап из четырех измерений? :)
Всегда было достаточно только х и у
forfrends - ответил в той ветке