Помогите, не понимаю Switch case

Обсуждаем контроллеры компании Atmel.
Ответить
Прорезались зубы
Аватара пользователя
Сообщения: 249
Зарегистрирован: Ср дек 31, 2008 01:55:19
Откуда: Санкт-Петербург

Сообщение RUNA »

Здравствуйте!
Вот пришлось разбираться с кодом на C. Компилятор ругается на команды.
void __init(void)
{
#define R24V PORTA.6 //
#define R48V PORTA.4 //
#define R96V PORTA.7 //
#define R192V PORTA.5 //

unsigned char temp;
temp=PINC;

temp= (temp & 0b00001100);

switch (temp)
{
case 0x00:
{
R24V=0;
R48V=1;
R96V=1;
R192V=0;
break;
}
case 0x08:
{
R24V=1;
R48V=0;
R96V=1;
R192V=0;
break;
}
....
Выдает ошибку
error: expected ';' before numeric constant
Никогда не бойся делать то, что ты не умеешь. Ковчег был сооружен любителем. Профессионалы построили "Титаник".
Я всегда делаю то, что не умею, иначе как я научусь?! Когда Муза приходит ко мне, то застает меня за работой! - Пикассо.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Сообщение Ivanoff-iv »

фигурные скобки не нужны, тут принцип не как у иф/елзе а как при переходе на метку (если бы брейков не было код бы дальше пошел выполняться)
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Реклама
Прорезались зубы
Аватара пользователя
Сообщения: 249
Зарегистрирован: Ср дек 31, 2008 01:55:19
Откуда: Санкт-Петербург

Сообщение RUNA »

Скобки убрал, та же ерунда.
Никогда не бойся делать то, что ты не умеешь. Ковчег был сооружен любителем. Профессионалы построили "Титаник".
Я всегда делаю то, что не умею, иначе как я научусь?! Когда Муза приходит ко мне, то застает меня за работой! - Пикассо.
Друг Кота
Аватара пользователя
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Сообщение Ivanoff-iv »

должно быть так:
switch (переменная)
{
case число:
код;
код;
break;
case другое_число:
код;
код;
break;
};
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Реклама
Эиком - электронные компоненты и радиодетали
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

Выложите весь код switch-case'а и покажите на какую строку ругается компилятор.
По поводу скобок. Они допускаются к использованию, но в данном случае в них нет необходимости.
Контактная информация:
Реклама
Прорезались зубы
Аватара пользователя
Сообщения: 249
Зарегистрирован: Ср дек 31, 2008 01:55:19
Откуда: Санкт-Петербург

Сообщение RUNA »

Да, именно так я и сделал. Но, ругается не на скобки а на ";"
Никогда не бойся делать то, что ты не умеешь. Ковчег был сооружен любителем. Профессионалы построили "Титаник".
Я всегда делаю то, что не умею, иначе как я научусь?! Когда Муза приходит ко мне, то застает меня за работой! - Пикассо.
Реклама
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

PS: Да, и какой компилятор ? Б.м. код взят из CV, а пытаетесь его прогнать через какой-либо другой. Тогда, с данным кодом, это не прокатит.
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Сообщение Ivanoff-iv »

Alex да, только если их сделать как у ТС, break сможет выкинуть только из внутренней скобки, а не из свитча.
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Прорезались зубы
Аватара пользователя
Сообщения: 249
Зарегистрирован: Ср дек 31, 2008 01:55:19
Откуда: Санкт-Петербург

Сообщение RUNA »

void __init(void)
{
#define R24V PORTA.6 //
#define R48V PORTA.4 //
#define R96V PORTA.7 //
#define R192V PORTA.5 //

unsigned char temp;
temp=PINC;

temp= (temp & 0b00001100);

switch (temp)
{
case 0x00:
{
R24V=0;
R48V=1;
R96V=1;
R192V=0;

break;
}
case 0x08:
{
R24V=1;
R48V=0;
R96V=1;
R192V=0;

break;
}
case 0x04:
{
R24V=1;
R48V=1;
R96V=1;
R192V=0;

break;
}
case 0x0C:
{
R24V=1;
R48V=1;
R96V=1;
R192V=1;

break;
}
}
Ругается на все что выделено
Ругань от компилятора
../__init.c:33: error: expected ';' before numeric constant
../__init.c:41: error: expected ';' before numeric constant
../__init.c:42: error: expected ';' before numeric constant
../__init.c:43: error: expected ';' before numeric constant
../__init.c:44: error: expected ';' before numeric constant
../__init.c:49: error: expected ';' before numeric constant
../__init.c:50: error: expected ';' before numeric constant
../__init.c:51: error: expected ';' before numeric constant
../__init.c:52: error: expected ';' before numeric constant
../__init.c:57: error: expected ';' before numeric constant
../__init.c:58: error: expected ';' before numeric constant
../__init.c:59: error: expected ';' before numeric constant
../__init.c:60: error: expected ';' before numeric constant



}

Добавлено after 4 minutes 9 seconds:
Мож какую нибудь библиотеку надо подключить?
Никогда не бойся делать то, что ты не умеешь. Ковчег был сооружен любителем. Профессионалы построили "Титаник".
Я всегда делаю то, что не умею, иначе как я научусь?! Когда Муза приходит ко мне, то застает меня за работой! - Пикассо.
Друг Кота
Аватара пользователя
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Сообщение Ivanoff-iv »

В CVAVR такой код скомпилился без проблем
switch (Byte) {
case 0x00: break;
case 0x08: break;
};

дак у тебя, похоже это и без кейса не сработает - проверь

Добавлено after 45 seconds:
в смысле - эта ошибка к кейсу не относится
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

[uquote="Ivanoff-iv",url="/forum/viewtopic.php?p=3112172#p3112172"]break сможет выкинуть только из внутренней скобки, а не из свитча.[/uquote] Вы уверены в своём ответе ? :shock:

RUNA, компилятор какой ?
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Сообщение Ivanoff-iv »

давай весь код, интересует какие и где переменные объявлены (похоже он имена твоих переменных рассматривает частями)

Добавлено after 33 seconds:
про брейк сейчас проверю
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

По всей видимости, код с синтаксисом CVAVR'а пытаются скомпилировать другим более вменяемым компилятором.
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Сообщение Ivanoff-iv »

да, кидает, куда надо...

Добавлено after 2 minutes 12 seconds:
А что не нравится тебе и более вменяемому компилятору?

Добавлено after 1 minute 43 seconds:
мне вот, было, скобки не понравились , но это не они (да и они оказались правильны) (а мне наука)
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 353
Зарегистрирован: Вс янв 19, 2014 22:41:55

Сообщение Siarzhuk »

PORTA.6 - интересный такой С, что позволяет идентификаторы, начинающиеся с цифр. Смотрите примеры к вашему компилятору как доступ к полям порта осуществляется и правьте соответственно.
Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR! ;-)
Друг Кота
Аватара пользователя
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Сообщение Ivanoff-iv »

чета я ваще аслеп :shock: то, что искал - прямо под носом лежит!
всё, пора спать а то уже второй явный косяк и оба сегодня
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Прорезались зубы
Аватара пользователя
Сообщения: 249
Зарегистрирован: Ср дек 31, 2008 01:55:19
Откуда: Санкт-Петербург

Сообщение RUNA »

Компилятор WinAVR-20100110 для AStudio

Добавлено after 2 minutes 49 seconds:
Весь код был создан под CVAVR 1.25.9 . Пытаюсь переделать под AStudio 4
Никогда не бойся делать то, что ты не умеешь. Ковчег был сооружен любителем. Профессионалы построили "Титаник".
Я всегда делаю то, что не умею, иначе как я научусь?! Когда Муза приходит ко мне, то застает меня за работой! - Пикассо.
Друг Кота
Аватара пользователя
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Сообщение Ivanoff-iv »

Да, в CVAVR так и пишется PORTA.6 ,а в других компилятора может быть по другому

Добавлено after 3 minutes 42 seconds:
RUNA у тебя в дефайнах косяк, потому так по коду и раскидано
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Прорезались зубы
Аватара пользователя
Сообщения: 249
Зарегистрирован: Ср дек 31, 2008 01:55:19
Откуда: Санкт-Петербург

Сообщение RUNA »

Где мне найти описалова на WinAVR-20100110 а, то найти не могу.
Ткните носом где взять. Уже целый день сижу с это проблемой, а решить не могу.
Никогда не бойся делать то, что ты не умеешь. Ковчег был сооружен любителем. Профессионалы построили "Титаник".
Я всегда делаю то, что не умею, иначе как я научусь?! Когда Муза приходит ко мне, то застает меня за работой! - Пикассо.
Друг Кота
Аватара пользователя
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Сообщение Ivanoff-iv »

возми готовый проект под свой компилятор и посмотри как там к конкретной ноге порта обращаются

Добавлено after 1 minute 13 seconds:
или сам попробуй по разному (без точки например)

Добавлено after 1 minute 35 seconds:
или в дефайны впиши только номера битов,а внизу уже соберёшь значение

Добавлено after 4 minutes 23 seconds:
примерно так:
#define R24V 6 //
#define R48V 4 //
#define R96V 7 //
#define R192V 5 //
а внизу сначала
PORTA &= 0b00001111; // для очистки 4-7 ног порта А
а затем
PORTA |=(1<<R24V)|(1<<R96V); //для записи 1 в нужные места

причины правок — добавил комментарии, исправил написание побитового или.
Последний раз редактировалось Ivanoff-iv Ср май 24, 2017 04:54:04, всего редактировалось 3 раза.
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Ответить

Вернуться в «AVR»