roboforum.ru

Технический форум по робототехнике.
Текущее время: 18 фев 2025, 19:40

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




Начать новую тему Ответить на тему  [ Сообщений: 132 ]  На страницу Пред.  1, 2, 3, 4, 5 ... 9  След.
Автор Сообщение
 Заголовок сообщения: Re: Гусеничный робот noname
СообщениеДобавлено: 15 дек 2011, 19:36 
Не в сети
Аватара пользователя

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

_________________
РАБОТА, РАБОТА перейди на Федота, с Федота на его брата, а ко мне их зарплата.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Гусеничный робот noname
СообщениеДобавлено: 15 дек 2011, 20:11 
Не в сети
Аватара пользователя

Зарегистрирован: 10 дек 2010, 13:16
Сообщения: 4995
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей
два

Добавлено спустя 34 секунды:
(Вероятно, зависит от компилятора. В Hi Tech C) char = unsigned char

_________________
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Гусеничный робот noname
СообщениеДобавлено: 15 дек 2011, 20:20 
Не в сети
Аватара пользователя

Зарегистрирован: 15 сен 2007, 13:03
Сообщения: 6338
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович
Си мутная хрень, что ппц, как char может быть signed? signed|unsigned byte я бы еще понял..

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

_________________
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Гусеничный робот noname
СообщениеДобавлено: 15 дек 2011, 20:22 
Не в сети
Аватара пользователя

Зарегистрирован: 10 дек 2010, 13:16
Сообщения: 4995
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей
Duhas писал(а):
Си мутная хрень, что ппц, как char может быть signed? signed|unsigned byte я бы еще понял..

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

от -127 до 128
А, понял твой вопрос. Ну в курсах специально объясняют, что тип char не имеет отношения к character, как бы этого не хотелось :-)
а byte - это ни что иное, чем
#define byte (unsigned char)

_________________
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.


Последний раз редактировалось dccharacter 15 дек 2011, 20:26, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Гусеничный робот noname
СообщениеДобавлено: 15 дек 2011, 20:26 
Не в сети
Аватара пользователя

Зарегистрирован: 15 сен 2007, 13:03
Сообщения: 6338
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович
область определения понятна, но терминология знаковый/беззнаковый символ - мягко говоря коробит..

_________________
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Гусеничный робот noname
СообщениеДобавлено: 15 дек 2011, 21:16 
Не в сети
Аватара пользователя

Зарегистрирован: 15 янв 2011, 11:27
Сообщения: 317
Откуда: Челябинск
прог. языки: C/C++
ФИО: Александр
Код:
char i2c_read_byte(void) 

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

Добавлено спустя 1 минуту 26 секунд:
Или где-то косяк с приведением типов?

_________________
РАБОТА, РАБОТА перейди на Федота, с Федота на его брата, а ко мне их зарплата.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Гусеничный робот noname
СообщениеДобавлено: 15 дек 2011, 23:28 
Не в сети

Зарегистрирован: 27 авг 2008, 10:45
Сообщения: 1981
Откуда: Харьков
прог. языки: С/С++
Пока ты эти байтовые значения не начинаешь расширять - тебе вообще насрать 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 превращать, когда байты сливаешь.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Гусеничный робот noname
СообщениеДобавлено: 15 дек 2011, 23:37 
Не в сети
Аватара пользователя

Зарегистрирован: 15 янв 2011, 11:27
Сообщения: 317
Откуда: Челябинск
прог. языки: C/C++
ФИО: Александр
int ax = read_rx();
char axl = read_rx();
int ax =axl;
Как-то так? походу не вкурил

Добавлено спустя 2 минуты 34 секунды:
Значения вроде плавно меняются, завтра ещё раз проверю!

_________________
РАБОТА, РАБОТА перейди на Федота, с Федота на его брата, а ко мне их зарплата.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Гусеничный робот noname
СообщениеДобавлено: 15 дек 2011, 23:51 
Не в сети

Зарегистрирован: 27 авг 2008, 10:45
Сообщения: 1981
Откуда: Харьков
прог. языки: С/С++
Тебе надо что? Тебе надо 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
нет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Гусеничный робот noname
СообщениеДобавлено: 16 дек 2011, 00:11 
Не в сети
Аватара пользователя

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

_________________
РАБОТА, РАБОТА перейди на Федота, с Федота на его брата, а ко мне их зарплата.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Гусеничный робот noname
СообщениеДобавлено: 16 дек 2011, 09:10 
Не в сети
Аватара пользователя

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

_________________
РАБОТА, РАБОТА перейди на Федота, с Федота на его брата, а ко мне их зарплата.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Гусеничный робот noname
СообщениеДобавлено: 17 дек 2011, 03:33 
Не в сети

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Гусеничный робот noname
СообщениеДобавлено: 17 дек 2011, 10:32 
Не в сети

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Гусеничный робот noname
СообщениеДобавлено: 17 дек 2011, 10:35 
Не в сети
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Гусеничный робот noname
СообщениеДобавлено: 17 дек 2011, 10:37 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2004, 18:01
Сообщения: 24218
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов
cjA писал(а):
signed char два байта займет в памяти потому что Си не умеет побитово память распределять

И эти люди рассказывают нам про то, чем хорош asm :D

_________________
Проект [[Open Robotics]] - Универсальные модули для построения роботов


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

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


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

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


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

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