Например, если вы хотите прочитать что-то из 24c02, лучше не использовать %c, чтобы отобразить и прочитать вот так? Как на рисунке.
- Вложения
-
- 1448625616_916802.png
- (25.38 КБ) 260 скачиваний
Это еще мало.Eddy_Em писал(а):Некоторые кривые реализации вообще чуть ли не 2кБ отжирают!
Ну на мега8 malloc занимает где-то 350 байт кода, и весь код охота уместить в 2кило кода в месте с таблицей на 3кило флеша, что бы еще места осталось.Eddy_Em писал(а):Вы туда еще malloc запихайте ради полного "Щассья".
Для отладки можно. Быстрее нагородить форматный вывод в UART, чем в 100500-й раз реализовывать вывод в захардкоженном формате.printf - очень жирная фиговина.
Как связаны аллокаторы и MMU? Распределением памяти программа занимается самостоятельно в виртуальном линейном пространстве. Доступа к MMU у нее нет.Что до алллокаторов памяти, то без MMU они нафиг не нужы, т.к. тоже через одно место делаются и вносят лишний оверхед.
А "вот так" это вот как?чтобы отобразить и прочитать вот так? Как на рисунке.
Код: Выделить всё
UART_puts("ID OCT-");
UART_write(&str[18], 5);
Код: Выделить всё
UART_puts("ID OCT-");
str[23] = 0; //терминирующий ноль
UART_puts(&str[18]);
Для полноценной реализации примерно столько и уйдет. Вот только в контроллерах эта полноценная реализация нужна примерно никогда.Это еще мало.Некоторые кривые реализации вообще чуть ли не 2кБ отжирают!
если нужна только печать HEX, то, наверно, можно сэкономить 2 кило флеш с 2Мб, будет оправдано.Eddy_Em писал(а):Что до печати HEX
Код: Выделить всё
do{
uint8_t temp = val & 0xFF;
buf[1] = temp & 0x0F;
if(buf[1] < 10)buf[1] += '0'; else buf[1] = buf[1] - 0x0A + 'A';
buf[0] = temp >> 4;
if(buf[0] < 10)buf[0] += '0'; else buf[0] = buf[0] - 0x0A + 'A';
buf -= 2;
val >>= 8; //не все контроллеры любят сдвиг на нецелое число, поэтому сдвигаем на байт
}while(val);Код: Выделить всё
do{
buf[0] = val % base;
if(buf[0] < 10)buf[0] += '0'; else buf[0] = buf[0] - 0x0A + 'A';
buf--;
val /= base;
}while(val);По чему нельзя использовать?Marlin Boardley писал(а):Лучше ли не использовать типы char в программировании stm32
а ты, ТС, загнал туда, в 24c02, эти символы, что бы их потом прочитать, или, хотя бы терминал в HEX переключил?Marlin Boardley писал(а):если вы хотите прочитать что-то из 24c02, лучше не использовать %c
Код: Выделить всё
printf("%10.3f\n", f);Marlin Boardley писал(а):Лучше ли не использовать типы char в программировании stm32 или embedded?