• Система автоматизации с открытым исходным кодом на базе 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
 
Сверху Снизу