roboforum.ru

Технический форум по робототехнике.
Текущее время: 30 апр 2025, 00:10

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 106 ]  На страницу Пред.  1, 2, 3, 4, 5, 6, 7, 8  След.
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: 12 мар 2007, 21:27 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
Myp писал(а):
поднимаю вобщем заново вопрос

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


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

    (int)MSS          

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

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

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

(char)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 12 мар 2007, 21:32 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
наверно зеленые цифры это значения в счетчике программы (PC) и связаны с командами АСМа  - переключись на просмотр АСМа и посмотри.

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

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


вот так - proteus123.narod.ru/01.htm


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 12 мар 2007, 21:35 
Не в сети
скрытый хозяин вселенной :)
Аватара пользователя

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

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

ладно переделал
теперь так
Код:
     MSS = resived >> 2;  
     mssint = (int)MSS;

разве это значит что я кроме присваивания переменной mssint числового значения MSS ещё и саму переменную MSS привожу к числовому виду?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 12 мар 2007, 21:43 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
выше написал уже.

========

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 12 мар 2007, 21:48 
Не в сети
скрытый хозяин вселенной :)
Аватара пользователя

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

========

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


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


ну незнаю как хотите
имхо вопросы из раздела дурацких =)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 12 мар 2007, 21:54 
Не в сети
скрытый хозяин вселенной :)
Аватара пользователя

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 12 мар 2007, 22:06 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
Не могу понять в чем смысл приведения типа ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 12 мар 2007, 22:15 
Не в сети
скрытый хозяин вселенной :)
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 12 мар 2007, 22:39 
Не в сети
Site Admin
Аватара пользователя

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

Код:
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;                        
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 12 мар 2007, 22:47 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
Myp писал(а):
хм

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


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

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


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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 12 мар 2007, 22:49 
Не в сети
скрытый хозяин вселенной :)
Аватара пользователя

Зарегистрирован: 18 сен 2006, 12:26
Сообщения: 18018
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич
Цитата:
// зачем так!???!!! '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]

ох блин вот это новость...
:?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 12 мар 2007, 22:54 
Не в сети
скрытый хозяин вселенной :)
Аватара пользователя

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

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


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

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


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

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


хм
ну вот
а в симуляторе написан именно символ который передаётся
вот я и подумал что в памяти храниться тоже символ...
ну и попытался работать с символами...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 12 мар 2007, 23:18 
Не в сети
скрытый хозяин вселенной :)
Аватара пользователя

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


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

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

и дальше уже
switch(massiv[1])
case 'R'


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 13 мар 2007, 01:10 
Не в сети
Site Admin
Аватара пользователя

Зарегистрирован: 09 фев 2006, 15:36
Сообщения: 3339
Откуда: Москва
Skype: vooon341
прог. языки: Python, C, Bash, JavaScript, C++, PHP
ФИО: Владимир Ермаков
Цитата:
почему опасное? я таково незнаю. объясните плиз


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

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

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

возвращает указатель на начало принятого блока (return str;)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 13 мар 2007, 01:23 
Не в сети
Site Admin
Аватара пользователя

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

Код:
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 теперь будет число переданное после буквы

   //***
 }
}


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 106 ]  На страницу Пред.  1, 2, 3, 4, 5, 6, 7, 8  След.

Часовой пояс: UTC + 4 часа


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO