roboforum.ru

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

 

Гусеничный робот noname

Наше хобби — конструировать и программировать.
Демонстрация готовых роботов и устройств построенных своими руками.

Re: Гусеничный робот noname

Сообщение Korbofos » 15 дек 2011, 19:36

signed char, unsigned char, char - три разных типа?
РАБОТА, РАБОТА перейди на Федота, с Федота на его брата, а ко мне их зарплата.
Аватара пользователя
Korbofos
 
Сообщения: 296
Зарегистрирован: 15 янв 2011, 11:27
Откуда: Челябинск
прог. языки: C/C++
ФИО: Александр

Re: Гусеничный робот noname

Сообщение dccharacter » 15 дек 2011, 20:11

два

Добавлено спустя 34 секунды:
(Вероятно, зависит от компилятора. В Hi Tech C) char = unsigned char
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
Аватара пользователя
dccharacter
 
Сообщения: 4862
Зарегистрирован: 10 дек 2010, 13:16
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей

Re: Гусеничный робот noname

Сообщение Duhas » 15 дек 2011, 20:20

Си мутная хрень, что ппц, как char может быть signed? signed|unsigned byte я бы еще понял..

все, не лезу больше )
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"
Аватара пользователя
Duhas
 
Сообщения: 6341
Зарегистрирован: 15 сен 2007, 13:03
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович

Re: Гусеничный робот noname

Сообщение dccharacter » 15 дек 2011, 20:22

Duhas писал(а):Си мутная хрень, что ппц, как char может быть signed? signed|unsigned byte я бы еще понял..

все, не лезу больше )

от -127 до 128
А, понял твой вопрос. Ну в курсах специально объясняют, что тип char не имеет отношения к character, как бы этого не хотелось :-)
а byte - это ни что иное, чем
#define byte (unsigned char)
Последний раз редактировалось dccharacter 15 дек 2011, 20:26, всего редактировалось 1 раз.
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
Аватара пользователя
dccharacter
 
Сообщения: 4862
Зарегистрирован: 10 дек 2010, 13:16
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей

Re: Гусеничный робот noname

Сообщение Duhas » 15 дек 2011, 20:26

область определения понятна, но терминология знаковый/беззнаковый символ - мягко говоря коробит..
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"
Аватара пользователя
Duhas
 
Сообщения: 6341
Зарегистрирован: 15 сен 2007, 13:03
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович

Re: Гусеничный робот noname

Сообщение Korbofos » 15 дек 2011, 21:16

Код: Выделить всёРазвернуть
char i2c_read_byte(void)  

Не могу понять где косяк с компасом? Функция в примере возвращает значение со знаком. Пробовал со знаком без знака. Одна и та же ерунда выходит. Даташит на английском только расстраивает :(

Добавлено спустя 1 минуту 26 секунд:
Или где-то косяк с приведением типов?
РАБОТА, РАБОТА перейди на Федота, с Федота на его брата, а ко мне их зарплата.
Аватара пользователя
Korbofos
 
Сообщения: 296
Зарегистрирован: 15 янв 2011, 11:27
Откуда: Челябинск
прог. языки: C/C++
ФИО: Александр

Re: Гусеничный робот noname

Сообщение boez » 15 дек 2011, 23:28

Пока ты эти байтовые значения не начинаешь расширять - тебе вообще насрать signed или unsigned. Потому что в процессоре к примеру 0хС0 - это просто 11000000. И все. Называется переменная signed - компилятор думает, что это -64. Называется unsigned - думает что 192. А реально это 11000000, оно как пришло в таком виде из i2c, так именно в таком же виде 11000000 уедет в uart. И вот только на той стороне, в компе, когда ты его начнешь расширять до int - оно превратится в -64 или 192, в зависимости от того как был обозван исходный байт.

И вот там, кстати, тебя поджидает хитрая засада. Твой код:
Код: Выделить всёРазвернуть
   int ax = (int)(axh << 8) + axl;

равносилен
Код: Выделить всёРазвернуть
   int ax = axl;

Рассказать почему или уже догадался?

Добавлено спустя 3 минуты 57 секунд:
Ты кстати зря сразу это все в тригонометрию свою заталкиваешь. Выведи сначала 12 отдельных байт. Посмотри как меняются когда вертишь железяку. Объедини в 6 слов. На них посмотри. Посмотри, плавно ли меняются когда плавно вращаешь. Корректно ли через ноль переходят? И вот уже потом делай тригонометрию. Да, кстати, если у тебя там знаковое 16-битное - тебе его надо не в int, а в short превращать, когда байты сливаешь.
boez
 
Сообщения: 1974
Зарегистрирован: 27 авг 2008, 10:45
Откуда: Харьков
прог. языки: С/С++

Re: Гусеничный робот noname

Сообщение Korbofos » 15 дек 2011, 23:37

int ax = read_rx();
char axl = read_rx();
int ax =axl;
Как-то так? походу не вкурил

Добавлено спустя 2 минуты 34 секунды:
Значения вроде плавно меняются, завтра ещё раз проверю!
РАБОТА, РАБОТА перейди на Федота, с Федота на его брата, а ко мне их зарплата.
Аватара пользователя
Korbofos
 
Сообщения: 296
Зарегистрирован: 15 янв 2011, 11:27
Откуда: Челябинск
прог. языки: C/C++
ФИО: Александр

Re: Гусеничный робот noname

Сообщение boez » 15 дек 2011, 23:51

Тебе надо что? Тебе надо 2 8-битных числа слить в одно 16-битное. Тут главное помнить, что знак - он всегда живет в старшем байте, если он вообще есть. Младшие - всегда беззнаковые. Вот так сливаются 8+8 в 16, причем не важно - знаковое или нет, разница только в типе ax:
Код: Выделить всёРазвернуть
unsigned char axl, axh;
short ax;

ax = (((unsigned short)axh)<<8)+axl


И для себя разберись, почему
Код: Выделить всёРазвернуть
ax = (((unsigned short)axh)<<8)+axl
работает, а
Код: Выделить всёРазвернуть
ax = (unsigned short)(axh<<8)+axl
нет.
boez
 
Сообщения: 1974
Зарегистрирован: 27 авг 2008, 10:45
Откуда: Харьков
прог. языки: С/С++

Re: Гусеничный робот noname

Сообщение Korbofos » 16 дек 2011, 00:11

Спасибо boez. Так совсем другое дело. Цифры "ближе к телу пошли(похожие на данные калибровки в примере)".
РАБОТА, РАБОТА перейди на Федота, с Федота на его брата, а ко мне их зарплата.
Аватара пользователя
Korbofos
 
Сообщения: 296
Зарегистрирован: 15 янв 2011, 11:27
Откуда: Челябинск
прог. языки: C/C++
ФИО: Александр

Re: Гусеничный робот noname

Сообщение Korbofos » 16 дек 2011, 09:10

Компас работает нормально, а вот с акселерометром походу косяк.
РАБОТА, РАБОТА перейди на Федота, с Федота на его брата, а ко мне их зарплата.
Аватара пользователя
Korbofos
 
Сообщения: 296
Зарегистрирован: 15 янв 2011, 11:27
Откуда: Челябинск
прог. языки: C/C++
ФИО: Александр

Re: Гусеничный робот noname

Сообщение cjA » 17 дек 2011, 03:33

signed char два байта займет в памяти потому что Си не умеет побитово память распределять
(почитал каменты- ребята, какже грустно за вас, не умеющих писать на asm, там таких проблемм нету, каждый бит в любом углу процессора тебе доступен подчинен (красиво сложил песню, пожалуй DeaD её подарю))
cjA
 
Сообщения: 468
Зарегистрирован: 19 мар 2010, 20:11

Re: Гусеничный робот noname

Сообщение boez » 17 дек 2011, 10:32

cjA, ты не прав. signed и unsigned char занимают совершенно одинаковое место - ровно один байт, т.е. 8 бит.
boez
 
Сообщения: 1974
Зарегистрирован: 27 авг 2008, 10:45
Откуда: Харьков
прог. языки: С/С++

Re: Гусеничный робот noname

Сообщение elmot » 17 дек 2011, 10:35

Си умеет распределять память побитово.
http://en.wikipedia.org/wiki/Bit_field
Аватара пользователя
elmot
 
Сообщения: 5674
Зарегистрирован: 10 ноя 2011, 12:02
Откуда: Turku, Finland
Skype: elmot73
прог. языки: Java и все-все=все
ФИО: Илья

Re: Гусеничный робот noname

Сообщение =DeaD= » 17 дек 2011, 10:37

cjA писал(а):signed char два байта займет в памяти потому что Си не умеет побитово память распределять

И эти люди рассказывают нам про то, чем хорош asm :D
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24053
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: Pascal / C++ / PHP / 1C
ФИО: Антон Ботов

Пред.След.

Вернуться в Наши проекты

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

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

Mail.ru counter