roboforum.ru

Технический форум по робототехнике.


прерывание виснет

Раздел создан специально для людей которым интересна робототехника, но в силу разных причин они не знают с чего начать.
Задавайте ваши вопросы, какими бы простыми они не казались, постоянные посетители форума постараются ответить на них по мере своих сил.
Робот своими руками. Самодельный робот.

Сообщение avr123.nm.ru » 12 мар 2007, 21:27

Myp писал(а):поднимаю вобщем заново вопрос

есть вот такой код


У вас приведение типа к int

    (int)MSS          

а в ветвлении
       
      switch (MSS)                     //проверка заголовка
      {
       case 'L':  

используются символы.

Наверно логичней к символьному типу приводить

(char)
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Сообщение avr123.nm.ru » 12 мар 2007, 21:32

наверно зеленые цифры это значения в счетчике программы (PC) и связаны с командами АСМа  - переключись на просмотр АСМа и посмотри.

прочерки повидимому означают что нет четкой привязке к тексту проги на АСМе и нельзя воткнуть там точку останова.

Myp писал(а):как вобще в протеусе делать отладку?
как мне заставить пошагово выполнять программу? :(
ато я жму step into и совершенно ничего не меняется


вот так - proteus123.narod.ru/01.htm
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Сообщение Myp » 12 мар 2007, 21:35

тааак
уже интересней
а квавр различает или нет переменные написанные большими и маленькими буквами???

я чёто решил что он различает переменные с прописными и строчными буквами

ладно переделал
теперь так
Код: Выделить всёРазвернуть
      MSS = resived >> 2;  
     mssint = (int)MSS;

разве это значит что я кроме присваивания переменной mssint числового значения MSS ещё и саму переменную MSS привожу к числовому виду?
Аватара пользователя
Myp
скрытый хозяин вселенной :)
 
Сообщения: 18018
Зарегистрирован: 18 сен 2006, 12:26
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич

Сообщение avr123.nm.ru » 12 мар 2007, 21:43

выше написал уже.

========

А что не в "микроконтроллерах"  обсуждение ?  
Может там продолжить ?
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Сообщение Myp » 12 мар 2007, 21:48

avr123.nm.ru писал(а):выше написал уже.

========

А что не в "микроконтроллерах"  обсуждение ?  
Может там продолжить ?


тоесть если раскрыть ваш ответ...
я и присвоил числовое значение пер. "mssint" и также изменил исходное значение в  пер. "MSS"
тоесть я не умею работать с переменными в си. =/


ну незнаю как хотите
имхо вопросы из раздела дурацких =)
Аватара пользователя
Myp
скрытый хозяин вселенной :)
 
Сообщения: 18018
Зарегистрирован: 18 сен 2006, 12:26
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич

Сообщение Myp » 12 мар 2007, 21:54

всёже непонимаю

символы благополучно в буфер принимаються
без проблем
но программа светиком не моргает =/
тоесть мк сидит гдето в процедуре приёма символов и тупо ждёт следующего символа
не выходит из этого ожидания почемуто:(
Аватара пользователя
Myp
скрытый хозяин вселенной :)
 
Сообщения: 18018
Зарегистрирован: 18 сен 2006, 12:26
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич

Сообщение avr123.nm.ru » 12 мар 2007, 22:06

Не могу понять в чем смысл приведения типа ?
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Сообщение Myp » 12 мар 2007, 22:15

хм
ну мы же принимаем текстовые данные по уарту?
принимаем например строку R20X
и мне надо оперировать с числом 20 а не с символами "2" и "0"
Аватара пользователя
Myp
скрытый хозяин вселенной :)
 
Сообщения: 18018
Зарегистрирован: 18 сен 2006, 12:26
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич

Сообщение Vooon » 12 мар 2007, 22:39

приведу ваш код со своими комментами

Код: Выделить всёРазвернуть
char resived;
char MSS, LSS;
int mss, lss;

void priem(void)                        //процедура приёма и обработки строки
{
      char *end = 'X';                 // зачем так!???!!! 'X' = 0x58, уже потенциально опасное место!
                                       // а если это буффер - то почему не массив?
      resived = *gets(end, 3);         // мне не понятно...
      MSS = resived >> 2;              // сдвиги не буду комментировать...
      mss = (int)MSS;                  // а толку? в См нет типа данных строка!!! char - это уже число! [0 - 0xFF]
      LSS = resived << 1;              
      lss = (int)LSS - 4;              // опять...

      switch (MSS)                     //проверка заголовка (кстати по стандарту свитч работает с int'ом (16 бит))
      {
       case 'L':                       //если заголовок L (если MSS == 0x4C)
       PORTB.1 = lss;                  // устанавливаем или сбрасываем бит порта
       break;                          
       case 'R':                       //если заголовок R (если MSS == 0x52)
       PORTB.2 = lss;
       break;
       case 'i':                       //тож самое, к этой ножке прицепляем светодиод, для красоты
       PORTB.3 = lss;                  // 'i' = 0x69
       break;
       }
       MSS = 0;                        
}
Аватара пользователя
Vooon
Site Admin
 
Сообщения: 3339
Зарегистрирован: 09 фев 2006, 15:36
Откуда: Москва
Skype: vooon341
прог. языки: Python, C, Bash, JavaScript, C++, PHP
ФИО: Владимир Ермаков

Сообщение avr123.nm.ru » 12 мар 2007, 22:47

Myp писал(а):хм

Ну мы же принимаем текстовые данные по уарту?


Все передаются числа.

Myp писал(а):принимаем например строку R20X


Она у вас помещается в строковую переменную ?

Или как в задаче /z5.htm   в буфер содержащий отдельные числа в порядке поступления в USART ?
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Сообщение Myp » 12 мар 2007, 22:49

// зачем так!???!!! 'X' = 0x58, уже потенциально опасное место

почему опасное?:( я таково незнаю. объясните плиз

// а если это буффер - то почему не массив?

эммм ну буфер это как раз "resived" в  нём 4 принятых символа храницца должны.

resived = *gets(end, 3);         // мне не понятно...

так  в хелпе к CVAVR написано...
char *gets(char *str, unsigned char len)

inputs, using getchar, the character string str terminated by the new line character.
The new line character will be replaced with 0.
The maximum length of the string is len. If len characters were read without encountering the new line character, then the string is terminated with 0 and the function ends.
The function returns a pointer to str.


mss = (int)MSS;                  // а толку? в См нет типа данных строка!!! char - это уже число! [0 - 0xFF]

ох блин вот это новость...
:?
Аватара пользователя
Myp
скрытый хозяин вселенной :)
 
Сообщения: 18018
Зарегистрирован: 18 сен 2006, 12:26
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич

Сообщение Myp » 12 мар 2007, 22:54

avr123.nm.ru писал(а):
Myp писал(а):хм

Ну мы же принимаем текстовые данные по уарту?


Все передаются числа.

Myp писал(а):принимаем например строку R20X


Она у вас помещается в строковую переменную ?

Или как в задаче /z5.htm   в буфер содержащий отдельные числа в порядке поступления в USART ?


хм
ну вот
а в симуляторе написан именно символ который передаётся
вот я и подумал что в памяти храниться тоже символ...
ну и попытался работать с символами...
Аватара пользователя
Myp
скрытый хозяин вселенной :)
 
Сообщения: 18018
Зарегистрирован: 18 сен 2006, 12:26
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич

Сообщение Myp » 12 мар 2007, 23:18

хорошо
попробуем по другому


чтобы принять 3 символа мне нужно создать массив из 3 символов
и в цикле заполнить этот массив с помощью getchar
(когда я буду ихчитать буфер  приёма будет автоматом очищаться?)

тоесть в итоге я получу массив вида 0х52, 0х32, 0х30 что будет соответствовать общечеловеческой строке "R20"

и дальше уже
switch(massiv[1])
case 'R'
Аватара пользователя
Myp
скрытый хозяин вселенной :)
 
Сообщения: 18018
Зарегистрирован: 18 сен 2006, 12:26
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич

Сообщение Vooon » 13 мар 2007, 01:10

почему опасное? я таково незнаю. объясните плиз


а потому, что непонятно куда этот указатель (простите за товтологию) указывает  :!:

ну если известно что всегда приходит 4 символа (строка выглядит "R20\0" - где \0 заменяется 1им байтом = 0
(вы наверняка видели в хелпе "null terminated string" - говорит о том что строка ОБЯЗАТЕЛЬНО должна заканчиваться 0 (иначе трудноуловимые баги гарантированны)))

char *gets(char *str, unsigned char len) - где (не смотря в хелп) *str указатель на буффер, len - длинна в байтах

возвращает указатель на начало принятого блока (return str;)
Аватара пользователя
Vooon
Site Admin
 
Сообщения: 3339
Зарегистрирован: 09 фев 2006, 15:36
Откуда: Москва
Skype: vooon341
прог. языки: Python, C, Bash, JavaScript, C++, PHP
ФИО: Владимир Ермаков

Сообщение Vooon » 13 мар 2007, 01:23

вот примерно так оно может выглядеть  :)

Код: Выделить всёРазвернуть
char buffer[10]; // реально нужно только 3+1 байт (3 значащих и терминатор)

void myfunc(void)
{
 char val = 0;
 gets(buffer, 3); // по RS232 передаем только направление, и значение (3 символа, без 0 в конце)
 
 if (buffer[0]=='R')
 {
   // включаем движок вправо
   sscanf(&buffer[1], "%i", &val); // в val теперь будет число переданное после буквы

   // далее уже чето колдуем с val
   //***
 }
 else if (buffer[0]=='L')
 {
   // включаем движок влево
   sscanf(&buffer[1], "%i", &val); // в val теперь будет число переданное после буквы

   //***
 }
}
Аватара пользователя
Vooon
Site Admin
 
Сообщения: 3339
Зарегистрирован: 09 фев 2006, 15:36
Откуда: Москва
Skype: vooon341
прог. языки: Python, C, Bash, JavaScript, C++, PHP
ФИО: Владимир Ермаков

Пред.След.

Вернуться в Новичкам или основы основ роботостроения.

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot], Yandex [Bot] и гости: 5