Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Вопросы начинающих

Вопросы начинающих Прежде чем задать вопрос, стоит воспользоваться поиском

Ответ
 
Опции темы Опции просмотра
Старый 09.02.2017, 18:45   #1
gromovi
Senior Member
 
Регистрация: 17.02.2009
Сообщений: 1,368
Вес репутации: 381/48
gromovi is just really nicegromovi is just really nicegromovi is just really nicegromovi is just really nice
По умолчанию int16

можно ли из двух int8 (Th) и int8 (Tl) получить один int16 (Thl) с возможностью доступа к отдельным байтам так и к целому числу?
Точно помню - вопрос этот уже подымал. Получал ответ, но сейчас через поиск найти не могу. Трудно искать не зная чего.
gromovi вне форума   Ответить с цитированием
Старый 09.02.2017, 18:52   #2
IceS
Super Moderator
 
Регистрация: 01.03.2007
Адрес: St. Petersburg
Возраст: 38
Сообщений: 3,249
Вес репутации: 3684/107
IceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond repute
Отправить сообщение для IceS с помощью ICQ
По умолчанию Re: int16

Цитата:
Сообщение от gromovi Посмотреть сообщение
можно ли из двух int8 (Th) и int8 (Tl) получить один int16 (Thl) с возможностью доступа к отдельным байтам так и к целому числу?
Точно помню - вопрос этот уже подымал. Получал ответ, но сейчас через поиск найти не могу. Трудно искать не зная чего.
1. A = Th<<8 + Tl.
Th = A>>8; Tl = A & 0xFF
2. вариант 1 но через макросы.
3. через структуры и юнионы.
__________________
- Готово, мастер !!!
- Что готово ???
- Сломал ...
IceS вне форума   Ответить с цитированием
Старый 09.02.2017, 18:53   #3
Ученый
Senior Member
 
Регистрация: 27.02.2007
Адрес: Москва
Возраст: 67
Сообщений: 577
Вес репутации: 1705/61
Ученый has a brilliant futureУченый has a brilliant futureУченый has a brilliant futureУченый has a brilliant futureУченый has a brilliant futureУченый has a brilliant futureУченый has a brilliant futureУченый has a brilliant futureУченый has a brilliant futureУченый has a brilliant futureУченый has a brilliant future
По умолчанию Re: int16

Ключевые слова union и structure в описании к компилятору
__________________
Не знать - не стыдно, стыдно не учиться.
Ученый вне форума   Ответить с цитированием
Старый 09.02.2017, 18:59   #4
IceS
Super Moderator
 
Регистрация: 01.03.2007
Адрес: St. Petersburg
Возраст: 38
Сообщений: 3,249
Вес репутации: 3684/107
IceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond repute
Отправить сообщение для IceS с помощью ICQ
По умолчанию Re: int16

http://www.microchip.su/showthread.p...struct+union#9
там не про чары, а про инты, но смысл должен быть понятен.
__________________
- Готово, мастер !!!
- Что готово ???
- Сломал ...
IceS вне форума   Ответить с цитированием
Старый 09.02.2017, 19:23   #5
gromovi
Senior Member
 
Регистрация: 17.02.2009
Сообщений: 1,368
Вес репутации: 381/48
gromovi is just really nicegromovi is just really nicegromovi is just really nicegromovi is just really nice
По умолчанию Re: int16

пока использовал
Код:
union typeMyData_T{
   signed int16 full;
   struct    {
      signed int8 TH ;//
      signed int8 TL;//
   };
} TEMPERATURA;
но помню, в CCS это делалось как то более элегантно. впрочем не важно. работает. Спасибо всем отозвавшимся.
gromovi вне форума   Ответить с цитированием
Старый 09.02.2017, 20:59   #6
petrd
Senior Member
 
Регистрация: 09.02.2008
Адрес: Воронеж
Возраст: 45
Сообщений: 1,663
Вес репутации: 1522/67
petrd has a brilliant futurepetrd has a brilliant futurepetrd has a brilliant futurepetrd has a brilliant futurepetrd has a brilliant futurepetrd has a brilliant futurepetrd has a brilliant futurepetrd has a brilliant futurepetrd has a brilliant futurepetrd has a brilliant futurepetrd has a brilliant future
Отправить сообщение для petrd с помощью ICQ
По умолчанию Re: int16

с помощью указателей
Код:
unsigned int x;
unsigned char lo, hi;

lo = *(unsigned char *)&x; // младший байт х
hi = *((unsigned char *)&x+1);  // старший байт x
и также обратно.
__________________
License MikroC, MikroC PRO and EasyPIC5 by mikroElektronika (the dead mikroICD replaced PICKit2 & PICKit3)
petrd вне форума   Ответить с цитированием
Старый 09.02.2017, 21:15   #7
Greg
Super Moderator
 
Регистрация: 25.02.2007
Адрес: Moscow, ODBS
Сообщений: 6,614
Вес репутации: 5056/155
Greg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond repute
По умолчанию Re: int16

Цитата:
Сообщение от petrd Посмотреть сообщение
с помощью указателей
Код:
unsigned int x;
unsigned char lo, hi;

lo = *(unsigned char *)&x; // младший байт х
hi = *((unsigned char *)&x+1);  // старший байт x
и также обратно.
а если индейцы другие?
Greg вне форума   Ответить с цитированием
Старый 09.02.2017, 22:04   #8
gromovi
Senior Member
 
Регистрация: 17.02.2009
Сообщений: 1,368
Вес репутации: 381/48
gromovi is just really nicegromovi is just really nicegromovi is just really nicegromovi is just really nice
По умолчанию Re: int16

Цитата:
Сообщение от petrd Посмотреть сообщение
с помощью указателей
Код:
unsigned int x;
unsigned char lo, hi;

lo = *(unsigned char *)&x; // младший байт х
hi = *((unsigned char *)&x+1);  // старший байт x
и также обратно.
хороший вариант. особенно если *(unsigned char *)&x; получится задефайнить.
а индейцы вроде те же. pic16f887 или 886. если ног хватит.
gromovi вне форума   Ответить с цитированием
Старый 09.02.2017, 22:12   #9
petrd
Senior Member
 
Регистрация: 09.02.2008
Адрес: Воронеж
Возраст: 45
Сообщений: 1,663
Вес репутации: 1522/67
petrd has a brilliant futurepetrd has a brilliant futurepetrd has a brilliant futurepetrd has a brilliant futurepetrd has a brilliant futurepetrd has a brilliant futurepetrd has a brilliant futurepetrd has a brilliant futurepetrd has a brilliant futurepetrd has a brilliant futurepetrd has a brilliant future
Отправить сообщение для petrd с помощью ICQ
По умолчанию Re: int16

Цитата:
Сообщение от Greg Посмотреть сообщение
а если индейцы другие?
Пусть сам думает будут у него меняться индейцы или всегда одного роста.
__________________
License MikroC, MikroC PRO and EasyPIC5 by mikroElektronika (the dead mikroICD replaced PICKit2 & PICKit3)
petrd вне форума   Ответить с цитированием
Старый 09.02.2017, 22:24   #10
petrd
Senior Member
 
Регистрация: 09.02.2008
Адрес: Воронеж
Возраст: 45
Сообщений: 1,663
Вес репутации: 1522/67
petrd has a brilliant futurepetrd has a brilliant futurepetrd has a brilliant futurepetrd has a brilliant futurepetrd has a brilliant futurepetrd has a brilliant futurepetrd has a brilliant futurepetrd has a brilliant futurepetrd has a brilliant futurepetrd has a brilliant futurepetrd has a brilliant future
Отправить сообщение для petrd с помощью ICQ
По умолчанию Re: int16

Цитата:
Сообщение от gromovi Посмотреть сообщение
хороший вариант. особенно если *(unsigned char *)&x; получится задефайнить.
а индейцы вроде те же. pic16f887 или 886. если ног хватит.
Получится, например в MikroC на них макросы написали и встроили в компилятор
Код:
#define Lo(param) ((char *)&param)[0]
#define Hi(param) ((char *)&param)[1]
#define Hihger(param) ((char *)&param)[2]
#define Hihgest(param) ((char *)&param)[3]
__________________
License MikroC, MikroC PRO and EasyPIC5 by mikroElektronika (the dead mikroICD replaced PICKit2 & PICKit3)
petrd вне форума   Ответить с цитированием
Старый 09.02.2017, 22:34   #11
HHIMERA
Banned
 
Регистрация: 10.06.2008
Возраст: 55
Сообщений: 2,716
Вес репутации: 3742/0
HHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond repute
По умолчанию Re: int16

Цитата:
Сообщение от gromovi Посмотреть сообщение
хороший вариант. особенно если *(unsigned char *)&x; получится задефайнить.
А что мешает... по сути???
Если порыться в песках сахары... там как-то заморачивались по поводу индейцев... в части автоматического определения их роста... Если ещё память не до конца отшибло... там всё было на уровне препроцессора... Метод простой как изгибание ложки взглядом... в Матрице...
Берётся число типа 0х12345678... и извлекается его половинка... типа полуслова... Какая - уже точно не помню... ИМХО младшая... По результату и дефайнится рост индейцев...
HHIMERA вне форума   Ответить с цитированием
Старый 10.02.2017, 07:16   #12
PICstone
Senior Member
 
Аватар для PICstone
 
Регистрация: 30.04.2008
Адрес: 51° 46' северной широты 55° 6' восточной долготы
Сообщений: 395
Вес репутации: 1356/51
PICstone has much to be proud ofPICstone has much to be proud ofPICstone has much to be proud ofPICstone has much to be proud ofPICstone has much to be proud ofPICstone has much to be proud ofPICstone has much to be proud ofPICstone has much to be proud ofPICstone has much to be proud ofPICstone has much to be proud of
По умолчанию Re: int16

Цитата:
Сообщение от gromovi Посмотреть сообщение
но помню, в CCS это делалось как то более элегантно. впрочем не важно. работает.
в CCS
Код:
x = make16(hi,lo);
PICstone вне форума   Ответить с цитированием
Старый 10.02.2017, 12:51   #13
DmitrijVDN
Senior Member
 
Регистрация: 09.04.2010
Сообщений: 717
Вес репутации: 1200/47
DmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud of
По умолчанию Re: int16

Цитата:
Сообщение от petrd Посмотреть сообщение
Получится, например в MikroC на них макросы написали и встроили в компилятор
Код:
#define Lo(param) ((char *)&param)[0]
#define Hi(param) ((char *)&param)[1]
#define Hihger(param) ((char *)&param)[2]
#define Hihgest(param) ((char *)&param)[3]
объясните плиз на примерах как это работает
DmitrijVDN вне форума   Ответить с цитированием
Старый 10.02.2017, 13:12   #14
Greg
Super Moderator
 
Регистрация: 25.02.2007
Адрес: Moscow, ODBS
Сообщений: 6,614
Вес репутации: 5056/155
Greg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond repute
По умолчанию Re: int16

Цитата:
Сообщение от petrd Посмотреть сообщение
Пусть сам думает будут у него меняться индейцы или всегда одного роста.
я к тому, что http://www.microchip.su/showpost.php...97&postcount=2 п.1 будет работать всегда, не надо думать.
Greg вне форума   Ответить с цитированием
Старый 10.02.2017, 13:27   #15
petrd
Senior Member
 
Регистрация: 09.02.2008
Адрес: Воронеж
Возраст: 45
Сообщений: 1,663
Вес репутации: 1522/67
petrd has a brilliant futurepetrd has a brilliant futurepetrd has a brilliant futurepetrd has a brilliant futurepetrd has a brilliant futurepetrd has a brilliant futurepetrd has a brilliant futurepetrd has a brilliant futurepetrd has a brilliant futurepetrd has a brilliant futurepetrd has a brilliant future
Отправить сообщение для petrd с помощью ICQ
По умолчанию Re: int16

Цитата:
Сообщение от DmitrijVDN Посмотреть сообщение
объясните плиз на примерах как это работает
Вот так:

Код:
unsigned long int x;
unsigned char a, b, c, d;

a = *(unsigned char *)&x; // младший байт х
b = *((unsigned char *)&x+1);  // старший байт x
c = *((unsigned char *)&x+2); 
d = *((unsigned char *)&x+3);  

Lo(x) = a;
Hi(x) = b;
Hihger(x) = c;
Hihgest(x) = d;

a = Lo(x);
b = Hi(x);
c = Hihger(x);
d = Hihgest(x);
__________________
License MikroC, MikroC PRO and EasyPIC5 by mikroElektronika (the dead mikroICD replaced PICKit2 & PICKit3)
petrd вне форума   Ответить с цитированием
Старый 10.02.2017, 13:54   #16
DmitrijVDN
Senior Member
 
Регистрация: 09.04.2010
Сообщений: 717
Вес репутации: 1200/47
DmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud of
По умолчанию Re: int16

ну а это куда
Код:
#define Lo(param) ((char *)&param)[0]
#define Hi(param) ((char *)&param)[1]
#define Hihger(param) ((char *)&param)[2]
#define Hihgest(param) ((char *)&param)[3]
все разобрался
Код:
#define Lo(param) (*((char *)&param))
#define Hi(param) (*((char *)&param +1))
#define Hihger(param) (*((char *)&param+2))
#define Hihgest(param) (*((char *)&param+3))

unsigned long int x;

x = 0x88888888;
Lo(x) = 0x78;
Hi(x) = 0x56;
Hihger(x) = 0x34;
Hihgest(x) = 0x12;

Последний раз редактировалось DmitrijVDN; 10.02.2017 в 14:12.
DmitrijVDN вне форума   Ответить с цитированием
Старый 10.02.2017, 14:08   #17
petrd
Senior Member
 
Регистрация: 09.02.2008
Адрес: Воронеж
Возраст: 45
Сообщений: 1,663
Вес репутации: 1522/67
petrd has a brilliant futurepetrd has a brilliant futurepetrd has a brilliant futurepetrd has a brilliant futurepetrd has a brilliant futurepetrd has a brilliant futurepetrd has a brilliant futurepetrd has a brilliant futurepetrd has a brilliant futurepetrd has a brilliant futurepetrd has a brilliant future
Отправить сообщение для petrd с помощью ICQ
По умолчанию Re: int16

Цитата:
Сообщение от DmitrijVDN Посмотреть сообщение
ну а это куда
Код:
#define Lo(param) ((char *)&param)[0]
#define Hi(param) ((char *)&param)[1]
#define Hihger(param) ((char *)&param)[2]
#define Hihgest(param) ((char *)&param)[3]
это внутри компилятора сидит, а пользователь в своем коде использует так:
Код:
# include <built_in.h>
.......
unsigned long int x;
unsigned char a, b, c, d;
........
Lo(x) = a;
Hi(x) = b;
............
__________________
License MikroC, MikroC PRO and EasyPIC5 by mikroElektronika (the dead mikroICD replaced PICKit2 & PICKit3)
petrd вне форума   Ответить с цитированием
Старый 10.02.2017, 14:28   #18
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Возраст: 38
Сообщений: 4,422
Вес репутации: 4370/119
Pridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond repute
По умолчанию Re: int16

Цитата:
Сообщение от gromovi Посмотреть сообщение
можно ли из двух int8 (Th) и int8 (Tl) получить один int16 (Thl) с возможностью доступа к отдельным байтам так и к целому числу?
Цитата:
Сообщение от gromovi Посмотреть сообщение
пока использовал
Код:
union typeMyData_T{
   signed int16 full;
   struct    {
      signed int8 TH ;//
      signed int8 TL;//
   };
} TEMPERATURA;
но помню, в CCS это делалось как то более элегантно. впрочем не важно. работает. Спасибо всем отозвавшимся.
Это стандартный Си-шный синтаксис, т.е. это не какая-то фишка компилятора от CCS. Ключевое слово union означает, что переменная с именем full и структура (без имени) используют одно адресное пространство - накладываются. Вместо структуры может быть массив из двух int8 - будет то же самое.
__________________
Прогресс неизбежен.
Pridnya вне форума   Ответить с цитированием
Старый 10.02.2017, 15:23   #19
DimaS
Senior Member
 
Регистрация: 05.04.2008
Адрес: Israel
Возраст: 44
Сообщений: 1,369
Вес репутации: 1992/67
DimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant future
По умолчанию Re: int16

Цитата:
Сообщение от Greg Посмотреть сообщение
я к тому, что http://www.microchip.su/showpost.php...97&postcount=2 п.1 будет работать всегда, не надо думать.
Причем, вменяемый компилятор, на второй строчке:
Th = A>>8; Tl = A & 0xFF

ни >> ни & делать не будет, в просто на этапе компиляции возьмет нужный байт из А.
DimaS на форуме   Ответить с цитированием
Старый 10.02.2017, 21:49   #20
gromovi
Senior Member
 
Регистрация: 17.02.2009
Сообщений: 1,368
Вес репутации: 381/48
gromovi is just really nicegromovi is just really nicegromovi is just really nicegromovi is just really nice
По умолчанию Re: int16

Цитата:
Сообщение от PICstone Посмотреть сообщение
в CCS
Код:
x = make16(hi,lo);
вот оно.
gromovi вне форума   Ответить с цитированием
Старый 10.02.2017, 21:54   #21
dosikus
Senior Member
 
Аватар для dosikus
 
Регистрация: 05.06.2007
Возраст: 45
Сообщений: 3,574
Вес репутации: 5590/128
dosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond repute
По умолчанию Re: int16

gromovi, встроенная фишка CCS, привыкнешь-завязнешь...
dosikus вне форума   Ответить с цитированием
Старый 10.02.2017, 21:54   #22
gromovi
Senior Member
 
Регистрация: 17.02.2009
Сообщений: 1,368
Вес репутации: 381/48
gromovi is just really nicegromovi is just really nicegromovi is just really nicegromovi is just really nice
По умолчанию Re: int16

Цитата:
Сообщение от Pridnya Посмотреть сообщение
1)Это стандартный Си-шный синтаксис, т.е. это не какая-то фишка компилятора от CCS. 2)Ключевое слово union означает, что переменная с именем full и структура (без имени) используют одно адресное пространство - накладываются. Вместо структуры может быть массив из двух int8 - будет то же самое.
1) это я знаю.
2) спасибо за подробное объяснение
gromovi вне форума   Ответить с цитированием
Старый 10.02.2017, 21:57   #23
gromovi
Senior Member
 
Регистрация: 17.02.2009
Сообщений: 1,368
Вес репутации: 381/48
gromovi is just really nicegromovi is just really nicegromovi is just really nicegromovi is just really nice
По умолчанию Re: int16

Цитата:
Сообщение от dosikus Посмотреть сообщение
gromovi, встроенная фишка CCS, привыкнешь-завязнешь...
есть такое дело. в свое время не разобрался, применил фичу CCS-а, вот и аукнулось.
gromovi вне форума   Ответить с цитированием
Старый 10.02.2017, 22:00   #24
dosikus
Senior Member
 
Аватар для dosikus
 
Регистрация: 05.06.2007
Возраст: 45
Сообщений: 3,574
Вес репутации: 5590/128
dosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond repute
По умолчанию Re: int16

Я б тебе посоветовал вАААще с CCS завязывать...
dosikus вне форума   Ответить с цитированием
Старый 10.02.2017, 22:04   #25
gromovi
Senior Member
 
Регистрация: 17.02.2009
Сообщений: 1,368
Вес репутации: 381/48
gromovi is just really nicegromovi is just really nicegromovi is just really nicegromovi is just really nice
По умолчанию Re: int16

Цитата:
Сообщение от dosikus Посмотреть сообщение
Я б тебе посоветовал вАААще с CCS завязывать...
Why?
gromovi вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
WDT почему не включается в CCS compiller vas38 Инструментарий 42 23.01.2016 17:20
Не работает косвенная адрессация в CCS PICC v4.140 и выше BIN_programmer Инструментарий 24 06.11.2015 20:35
секундомер9,9999с переделка на 0,99999с sergxxx Продукция MICROCHIP 7 24.01.2011 21:49
Алгоритм Герцеля. Mario Продукция MICROCHIP 45 08.12.2009 15:53
Где найти MPLAB C17 LeonidPr Продукция MICROCHIP 8 13.10.2009 13:46


Часовой пояс GMT +3, время: 00:59.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd. Перевод: zCarot