|
Множественный выбор, оператор switch, язык С |
|
|
|
Dec 21 2010, 17:26
|
Группа: Новичок
Сообщений: 5
Регистрация: 19-12-09
Пользователь №: 54 346

|
Программирую на С для микроконтроллеров AVR. Насколько большим может быть этот множественный выбор у оператора switch? Сделал пробный вариант программы на 20 вариантов выбора - работает, а вот на 256 - нет не работает. А нужно сделать выбор для 1024 вариантов. А как поступить в этом случае?
|
|
|
|
|
Dec 21 2010, 18:10
|
Местный
  
Группа: Свой
Сообщений: 263
Регистрация: 2-02-07
Из: CN, Ukraine
Пользователь №: 24 970

|
Switch реализуется через near jump, то есть ограничен +- 127 байт (поправьте, если забыл  ). А чем таблица функций не угодила ?
|
|
|
|
|
Dec 21 2010, 18:31
|
Группа: Новичок
Сообщений: 5
Регистрация: 19-12-09
Пользователь №: 54 346

|
Компилятор: ICCV7 for AVR (http://www.imagecraft.com/), целевой камень ATmega16. С помощью АЦП оцифровываю напряжение, пока ограничился на 256 уровнях (8 бит). Далее это значение передается по COM порту в виде 3-х байт ASCII кода. Выбор на switch применяю для перехода от 1-байтового значения к 3-м байт ASCII кода.
Сообщение отредактировал Aneg - Dec 21 2010, 18:35
|
|
|
|
|
Dec 21 2010, 18:44
|
Профессионал
    
Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007

|
С ума сойти можно. Код char buf[4];
char inp; // значение из АЦП itoa(inp, buf, 10); // библиотечная функция, см. http://ru.wikipedia.org/wiki/Itoa_%28%D0%A1%D0%B8%29 send_to_port(buf, strlen(buf)); Все!!! Никаких switch/case. или если надо точно 3 байта ASCII Код int n = sprintf(buf, "%03d", inp); send_to_port(buf, n);
|
|
|
|
|
Dec 22 2010, 03:13
|
Местный
  
Группа: Свой
Сообщений: 263
Регистрация: 2-02-07
Из: CN, Ukraine
Пользователь №: 24 970

|
Продолжим фантазировать  Цикл опущен специально . unsigned char ADCValue = ADC_Read(xxx); USART_Send( ADCValue / 100 ); ADCValue = ADCValue % 100; USART_Send( ADCValue / 10 ); ADCValue = ADCValue % 10; USART_Send( ADCValue );
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|