реклама на сайте
подробности

 
 
3 страниц V  < 1 2 3 >  
Reply to this topicStart new topic
> Множественный выбор, оператор switch, язык С
Сергей Борщ
сообщение Dec 22 2010, 04:08
Сообщение #16


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (MrYuran @ Dec 22 2010, 08:46) *
CODE
const char ascii_value_table[3][256] = {
"000","001", ... "256"
}

Как-то так...
const char ascii_value_table[4][256]. И действительно быстрее. И компактнее. Аплодисменты!


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
_dem
сообщение Dec 22 2010, 04:11
Сообщение #17


Местный
***

Группа: Свой
Сообщений: 263
Регистрация: 2-02-07
Из: CN, Ukraine
Пользователь №: 24 970



Цитата(_Pasha @ Dec 22 2010, 09:50) *
Скачайте хоть какую-нить мудрую книжку себе типа такого прежде чем смешить новизной подхода.


Почитайте какую-нибудь мудрую инструкцию типа этой , прежде чем открывать эти ваши Интернеты sm.gif
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Dec 22 2010, 04:14
Сообщение #18


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Автору эти три байта через com-порт наружу передавать и зачем там супер скорость преобразования char->ascii? А 1К под таблицу это не накладно ли будет?
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Dec 22 2010, 04:18
Сообщение #19


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(_dem @ Dec 22 2010, 10:11) *

Ну вот, Вы - хамить, а я Вам -про преобразование в десятичный код методом сдвига... не помню страницу. Досвидоз!
Go to the top of the page
 
+Quote Post
ReAl
сообщение Dec 22 2010, 04:41
Сообщение #20


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



И компактнее :-D — строки всё равно место занимают, а кода меньше даже при табличной реализации switch :-)

_dem
По поводу операций / % — «если уж так по́шло», то тогда через div_t div(value, 100), практически в два раза быстрее.
В смысле стандартную библиотеку языка хотя бы глянуь стоит.

Цитата(Сергей Борщ @ Dec 22 2010, 09:08) *
const char ascii_value_table[4][256]. И действительно быстрее. И компактнее. Аплодисменты!
можно и [3] — если выводить посимвольно или с форматом "%3.3s", оно тогда до отсутствующего терминатора и не дойдёт.
Можно даже "%4.3s", пробельчик перед числом добавить.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Dec 22 2010, 04:47
Сообщение #21


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(sergeeff @ Dec 22 2010, 10:14) *
Автору эти три байта через com-порт наружу передавать и зачем там супер скорость преобразования char->ascii? А 1К под таблицу это не накладно ли будет?

Ну это уж автору виднее - что ему дороже, объём или скорость.
Если у меня свободно 30к флеши из 60 и 1к ОЗУ из 2-х, то я не парясь встраиваю функции, размещаю таблицы и щедро развешиваю в памяти хендлы на периферию и виртуальные таймеры с оверхедом в 3-4 раза.
1к в флеши - совершенный пустяк, на мой взгляд. В ОЗУ - да, может быть серьёзно (для AVR), а может быть тоже ерунда (для ARM с 512к ОЗУ)


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Dec 22 2010, 04:54
Сообщение #22


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (ReAl @ Dec 22 2010, 09:41) *
можно и [3] — если выводить посимвольно или с форматом

CODE
char const TTT[][3] =
{
        "123",
        "123"
};
QUOTE
error: initializer-string for array of chars is too long
И все попутали порядок задания размерностей.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Dec 22 2010, 05:03
Сообщение #23


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Цитата(MrYuran @ Dec 22 2010, 11:47) *
Ну это уж автору виднее - что ему дороже, объём или скорость.


Автор как-то ушел в тень. Видимо от избытка чувств.
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Dec 22 2010, 05:26
Сообщение #24


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(sergeeff @ Dec 22 2010, 11:03) *
Автор как-то ушел в тень. Видимо от избытка чувств.

Он узнал, что кроме switch в языке Си, как не странно, существуют и другие операторы. lol.gif
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Dec 22 2010, 05:27
Сообщение #25


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(Сергей Борщ @ Dec 22 2010, 10:54) *
И все попутали порядок задания размерностей.

Ну я ж писал - думать лень sm.gif


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
_dem
сообщение Dec 22 2010, 05:41
Сообщение #26


Местный
***

Группа: Свой
Сообщений: 263
Регистрация: 2-02-07
Из: CN, Ukraine
Пользователь №: 24 970



ReAL
По поводу операций / % — «если уж так по́шло», то тогда через div_t div(value, 100), практически в два раза быстрее.
В смысле стандартную библиотеку языка хотя бы глянуь стоит.
[/quote]
Угу, а можно еще цикл поставить.
А еще вместо процедуры отправки поставить макрос, что в данном случае на AVR сэкономит, если склероз не подводит, 1 такт по скорости.
А еще сделать таблицу в флеше с инструкциями на каждый случай (т.е. не таблицу адресов функций, а таблицу с кодами ) Это будет ну вообще быстро.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Dec 22 2010, 05:56
Сообщение #27


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Таких перлов я ещё не встречал!
Запас бодрости на весь оставшийся день! Похлеще чем salmari.gif будет:-)
Браво!


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
singlskv
сообщение Dec 22 2010, 09:07
Сообщение #28


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



для байта на авр можно так:
Код
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;
}

Go to the top of the page
 
+Quote Post
777777
сообщение Dec 22 2010, 14:48
Сообщение #29


Профессионал
*****

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



Цитата(Aneg @ Dec 22 2010, 00:31) *
С помощью АЦП оцифровываю напряжение, пока ограничился на 256 уровнях (8 бит). Далее это значение передается по COM порту в виде 3-х байт ASCII кода. Выбор на switch применяю для перехода от 1-байтового значения к 3-м байт ASCII кода.

А если понадобится 16-разрядный АЦП?
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Dec 22 2010, 16:05
Сообщение #30


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Цитата(777777 @ Dec 22 2010, 21:48) *
А если понадобится 16-разрядный АЦП?


Вы ветку прочитали бы.
Go to the top of the page
 
+Quote Post

3 страниц V  < 1 2 3 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 05:34
Рейтинг@Mail.ru


Страница сгенерированна за 0.01558 секунд с 7
ELECTRONIX ©2004-2016