• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Тип переменной WORD?

Vovka

Member
Доброго времени суток!

Что-то я совсем запутался: в esp8266 есть тип двухбайтовая переменная?
 

pvvx

Активный участник сообщества
short, unsigned short, short int, signed short int, unsigned short int
 

Vovka

Member
по заголовочным файлам просматриваются такие определения:

typedef uint16_t word;

typedef __int16_t int16_t ;
typedef __uint16_t uint16_t ;

typedef signed short __int16_t;
typedef unsigned short __uint16_t;

Единственное, так нигде ни в файлах, ни даташитах размерность short не нашел!
Но вот на просторах интернета, например, пишут, что int для Arduino это 2 байта, а int для esp8266 это 4 байта!
А мне нужна исключительно двухбайтовая переменная :(
 

Vovka

Member
Проверил, два байта:
typedef uint16_t word;

Спасибо всем. Тема закрыта
 

pvvx

Активный участник сообщества
Единственное, так нигде ни в файлах, ни даташитах размерность short не нашел!
На сегодня во всех реализациях short - это 16 бит.
А int - зависит от компилятора и архитектуры CPU/ALU (обычно 16 или 32 бита).
В разных компиляторах и SDK вcтречаются ещё u16, i16.

А вот word - это вообще отсебятина и может быть любой разрядности - от 1 бита до 100500.
Можете описать сами и свой defined :)
 

pvvx

Активный участник сообщества
И не забудьте, что у ESP8266 и ESP32 адреса данных по умолчанию выровнены (aligned) по 4 байта...
 

pvvx

Активный участник сообщества
В итоге, если написать, к примеру, так:

const uint16_t m[10]; или переменные uint16_t m[10] размещены в IRAM, то

a = m[1]; при исполнении возникнет прерывание защиты, т.е. “protected” :p
И это тоже зависит от компилятора - разберется ли он в данном безобразии и заменит ли команду чтения по нечетному адресу на чтение по выровненному с дальнейшим сдвигом в регистре...
И т.д.
 

pvvx

Активный участник сообщества

pvvx

Активный участник сообщества
@nikolz - Нету в стандартных библиотеках C и C++ никаких word. И по POSIX аналогично.
Они могут появиться только в детских скетчах :)
 

nikolz

Well-known member
@nikolz - Нету в стандартных библиотеках C и C++ никаких word. И по POSIX аналогично.
Они могут появиться только в детских скетчах :)
Вы опять ошибаетесь.
Вы забыли про assembler именно там он определен так, как используется и сейчас,
в том числе и в микроконтроллерах,
и это гораздо раньше,чем паскаль.

 

pvvx

Активный участник сообщества
Вы опять ошибаетесь.
Вы забыли про assembler именно там он определен так, как используется и сейчас,
в том числе и в микроконтроллерах,
и это гораздо раньше,чем паскаль.

Ассемблер у каждого чипа разный и там творят даже синтаксис разные производители под свои варианты, как им понравится, не то что какие-то определения данных :)
Плюс для ASM компиляторы бывают разные со своими приколами.
Ну вписал кто-то работающий ранее на Паскале typedef word ... в свой скетч, а вы тут ищите от куда оно...
 

pvvx

Активный участник сообщества
Даже в мелких чипах, если и есть .word в asm, то оно 32 бита.
А тут ищут 16 битный word - дык он в Паскале :p
 
Сверху Снизу