Сергей Борщ 134 22 декабря, 2010 Опубликовано 22 декабря, 2010 · Жалоба const char ascii_value_table[3][256] = { "000","001", ... "256" } Как-то так... const char ascii_value_table[4][256]. И действительно быстрее. И компактнее. Аплодисменты! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_dem 0 22 декабря, 2010 Опубликовано 22 декабря, 2010 · Жалоба Скачайте хоть какую-нить мудрую книжку себе типа такого прежде чем смешить новизной подхода. Почитайте какую-нибудь мудрую инструкцию типа этой , прежде чем открывать эти ваши Интернеты :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sergeeff 1 22 декабря, 2010 Опубликовано 22 декабря, 2010 · Жалоба Автору эти три байта через com-порт наружу передавать и зачем там супер скорость преобразования char->ascii? А 1К под таблицу это не накладно ли будет? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_Pasha 0 22 декабря, 2010 Опубликовано 22 декабря, 2010 · Жалоба Ну вот, Вы - хамить, а я Вам -про преобразование в десятичный код методом сдвига... не помню страницу. Досвидоз! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ReAl 0 22 декабря, 2010 Опубликовано 22 декабря, 2010 · Жалоба И компактнее :-D — строки всё равно место занимают, а кода меньше даже при табличной реализации switch :-) _dem По поводу операций / % — «если уж так по́шло», то тогда через div_t div(value, 100), практически в два раза быстрее. В смысле стандартную библиотеку языка хотя бы глянуь стоит. const char ascii_value_table[4][256]. И действительно быстрее. И компактнее. Аплодисменты!можно и [3] — если выводить посимвольно или с форматом "%3.3s", оно тогда до отсутствующего терминатора и не дойдёт. Можно даже "%4.3s", пробельчик перед числом добавить. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrYuran 23 22 декабря, 2010 Опубликовано 22 декабря, 2010 · Жалоба Автору эти три байта через com-порт наружу передавать и зачем там супер скорость преобразования char->ascii? А 1К под таблицу это не накладно ли будет? Ну это уж автору виднее - что ему дороже, объём или скорость. Если у меня свободно 30к флеши из 60 и 1к ОЗУ из 2-х, то я не парясь встраиваю функции, размещаю таблицы и щедро развешиваю в памяти хендлы на периферию и виртуальные таймеры с оверхедом в 3-4 раза. 1к в флеши - совершенный пустяк, на мой взгляд. В ОЗУ - да, может быть серьёзно (для AVR), а может быть тоже ерунда (для ARM с 512к ОЗУ) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 134 22 декабря, 2010 Опубликовано 22 декабря, 2010 · Жалоба можно и [3] — если выводить посимвольно или с форматом char const TTT[][3] = { "123", "123" }; error: initializer-string for array of chars is too longИ все попутали порядок задания размерностей. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sergeeff 1 22 декабря, 2010 Опубликовано 22 декабря, 2010 · Жалоба Ну это уж автору виднее - что ему дороже, объём или скорость. Автор как-то ушел в тень. Видимо от избытка чувств. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SapegoAL 0 22 декабря, 2010 Опубликовано 22 декабря, 2010 · Жалоба Автор как-то ушел в тень. Видимо от избытка чувств. Он узнал, что кроме switch в языке Си, как не странно, существуют и другие операторы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrYuran 23 22 декабря, 2010 Опубликовано 22 декабря, 2010 · Жалоба И все попутали порядок задания размерностей. Ну я ж писал - думать лень :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_dem 0 22 декабря, 2010 Опубликовано 22 декабря, 2010 · Жалоба ReAL По поводу операций / % — «если уж так по́шло», то тогда через div_t div(value, 100), практически в два раза быстрее. В смысле стандартную библиотеку языка хотя бы глянуь стоит. Угу, а можно еще цикл поставить. А еще вместо процедуры отправки поставить макрос, что в данном случае на AVR сэкономит, если склероз не подводит, 1 такт по скорости. А еще сделать таблицу в флеше с инструкциями на каждый случай (т.е. не таблицу адресов функций, а таблицу с кодами ) Это будет ну вообще быстро. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg_spb 0 22 декабря, 2010 Опубликовано 22 декабря, 2010 · Жалоба Таких перлов я ещё не встречал! Запас бодрости на весь оставшийся день! Похлеще чем :salmari: будет:-) Браво! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
singlskv 0 22 декабря, 2010 Опубликовано 22 декабря, 2010 · Жалоба для байта на авр можно так: void itoa_byte(unsigned char n, unsigned char *s) { unsigned char ch = 0; if ((n >= 100) && (++ch)) { n -= 100; if ((n >= 100) && (++ch)) n -= 100; } *s++ = ch + 0x30; ch = (n * 157U + (n << 8)) >> 12; *s++ = ch + 0x30; ch <<= 1; n -= ch; ch <<= 2; n -=ch; *s++ = n + 0x30; } достаточно быстро и компактно а лучше так: void itoa_byte(unsigned char n, unsigned char *s) { unsigned char ch = 0x30; if ((n >= 100) && (++ch) && ((n -= 100) >= 100) && (++ch)) n -= 100; *s++ = ch; ch = (n * 157U + (n << 8)) >> 12; *s++ = ch + 0x30; ch <<= 1; n -= ch; ch <<= 2; n -=ch; *s++ = n + 0x30; } не, лучше всего так: void itoa_byte(unsigned char n, unsigned char *s) { unsigned char ch = 0x30; if ((n >= 100) && (++ch) && ((n -= 100) >= 100) && (++ch)) n -= 100; *s++ = ch; ch = n * 157U >> 8; ch += n; ch >>= 4; *s++ = ch + 0x30; ch <<= 1; n -= ch; ch <<= 2; n -=ch; *s++ = n + 0x30; } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
777777 0 22 декабря, 2010 Опубликовано 22 декабря, 2010 · Жалоба С помощью АЦП оцифровываю напряжение, пока ограничился на 256 уровнях (8 бит). Далее это значение передается по COM порту в виде 3-х байт ASCII кода. Выбор на switch применяю для перехода от 1-байтового значения к 3-м байт ASCII кода. А если понадобится 16-разрядный АЦП? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sergeeff 1 22 декабря, 2010 Опубликовано 22 декабря, 2010 · Жалоба А если понадобится 16-разрядный АЦП? Вы ветку прочитали бы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться