roboforum.ru

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

разные типы данных, ламерский вопрос

разные типы данных, ламерский вопрос

Myp » 12 фев 2007, 22:05

начал я вобщем по уарту принимать данные
и процесс встал

getchar() что возращает?
я так понимаю если  я по уарту передам единичку то getchar() выдаст мне символ 1

эммм а как мне цифири выжать из уарта?
тоесть даже так
как мне  выжать из уарта отдельно буквы и отдельно цифры?


короче, как мне из 2х символов принятых по уарту (например: "а2") вырезать двоечку??
наверняка моно както просто сделать :lol:

upd.
помогите плиз
в хелпе  CVAVR по англицки написано
и всё равно непонятно как мне из строки выделить и букву и цифру?

не я конечно могу обойтись без букв, но с буквами красивей

-= Александр =- » 12 фев 2007, 22:54

Любая книга по Си - глава о работе со строками.
А вообще все просто, типа того if((a>="0")&(a<="9"))...
А чтоб преобразовать код цифры в цифру - надо из него вычесть число Дауна (48 ).  :wink:

Myp » 12 фев 2007, 23:29

вобщем я посмотрел 30 минут бабий бунт по MTV и сразу почувствовал уменьшение серого вещества
собрав остатки этого вещества я выдал мысли

ход  мыслей был таков:

всякими шаманствами получили  мы строчку "а55" по уарту и записали её в переменную resived типа unsigned char.
типа так: resived = *gets(символ_конца_строки, 3);
предварительно договорились что MSS это главный значащий символ, а LSS младшие значащие символы.

1.  дальше определяем первый буквенный символ сдвигом строки вправо на 2 позиции. MSS = resived >> 2 (тут маленькая заковыка, строки вобще по жизни можно таким образом сдвигать :?  :?: ато в "Памятка Си для МК на ОДНОЙ странице !" не сказано).

2. потом определяем что типа символ как раз тот который мне нужен
if (MSS = "a")...

3. теперь мне надо сдвигом строки в другую сторону выделить оставшиеся 2 символа
которые как раз и будут искомыми символами обозначающими нужные мне цифры.
LSS = resived << 1 (а при сдвиге влево на пустое место нолик дописываеться? :lol: а  как же тогда быть? ).

4. открываем книжку по СИ и смотрим как мне перевести получившиеся "55" в цифры (вспоминаем дауна и смеёмся 8) ).
чёто типа Х = (int)LSS - 4; ???

5. else if ...перебираем все остальные символы которые я использую для общения.
Последний раз редактировалось Myp 13 фев 2007, 01:03, всего редактировалось 1 раз.

Myp » 13 фев 2007, 00:19

в хелпе написано

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.


в проекте пишу: resived = *gets(*X, 3);
ругаеться: L200 undefined symbol "X"
а как мне тогда по человечески записать символ конца строки???
Последний раз редактировалось Myp 13 фев 2007, 01:03, всего редактировалось 1 раз.

Myp » 13 фев 2007, 00:57

короче
в итоге пришёл к этому:


      unsigned char resived;  //объявляем

while (1)
{
      unsigned char *end = 'z';  //считаем что символ конца строки "х"
      resived = *gets(end, 3);      //собсно принимаем
}



вопрос, что это за звёздочки  *  и для чего они нужны?

avr123.nm.ru » 13 фев 2007, 02:10

Myp писал(а):вопрос, что это за звёздочки  *  и для чего они нужны?


это указатели.

Вот я попросил ПРОФИ рассказать что такое указатели и как их применять:

http://electronix.ru/forum/index.php?showtopic=26545

Re: разные типы данных, ламерский вопрос

avr123.nm.ru » 13 фев 2007, 02:14

Myp писал(а):getchar() что возращает?


число от 0 до 255  которому соответствует передаваемый
символ в таблице ASCII  

( таблицу ASCII  можно скачать на avr123.nm.ru/05.htm )

Myp писал(а):я так понимаю если  я по уарту передам единичку то getchar() выдаст мне символ 1


выдаст вам число  которому в таблице  ASCII соостветствует символ  '1'

подробней в упражнении 5:
avr123.nm.ru/z5.htm

Цитата:

"Символьный в нашем случае - потому что char указывает на типа данных - бесзнаковый символьный - это числа от 0 до 255 - по таблице ASCII им соответствуют символы  - (таблицу ASCII  см. стр. 5 курса)."

Re: разные типы данных, ламерский вопрос

Myp » 13 фев 2007, 11:03

"Символьный в нашем случае - потому что char указывает на типа данных - бесзнаковый символьный - это числа от 0 до 255 - по таблице ASCII им соответствуют символы  - (таблицу ASCII  см. стр. 5 курса)."

во теперь въехал =)


а всё остальное я так понял похоже на правду раз никто не возмущается :roll:

Myp » 13 фев 2007, 22:48

ещё над вопросом задумался

мне в принципе надо чтоб по прерыванию срабатывал уарт и записывал
в глобальные переменные значения в зависимости от  того что пришло(ну и конечно слал обратно отчёт "Яволь, натюрлих!")
а главная программа  работает непрерывно используя эти глобальные переменные
если переменные изменились то и программа соответственно отрабатывает изменения.

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

собсно вопрос, как мне  прилепить к прерыванию уарта кроме просто приёма байтов
ещё и обработку этих байтов чтоб зазря не опрашивать этот буфер в каждом цикле, уарт же эпизодически у меня включаеться

КОРОЧЕ:
засунуть процедуру приёма и обработки строки в процедуру прерывания
interrupt [USART_RXC] void usart_rx_isr(void) :?: :?:  :?:

Myp » 14 фев 2007, 22:07

еееееееее
я это сделал


блин засада реальная
мастер начального кода не пишет инклюд stdio.h там где все инклюды в начале программы

я изза этого пострадал
так как вызывал процедуру описанную в stdio.h до собственно инклюда stdio.h
переставил #include <stdio.h> в самое начало программы  и всё заработало

в аттаче собсно то о чём речь
код умеет реагировать на 3 события
тоесть 2 двигателя и светик =)


ЗЫ
если на уарт подключить ик приёмник то получиться ДУ =)
Вложения
контроллер.c
(4.9 КиБ) Скачиваний: 315


cron
Rambler\'s Top100 Mail.ru counter