реклама на сайте
подробности

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Прерывания
Allregia
сообщение Sep 9 2009, 19:11
Сообщение #16


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763



Цитата(zltigo @ Sep 9 2009, 19:05) *
Будет хуже. Совершенно лишние обращения к памяти, вместо регистровой работы.


Я там выше упомянул "статическую".
Статическую переменную в регистрах?!

Код
#pragma vector= WDT_VECTOR  
__interrupt void  WDT_interrupt(){
static int counter;


Если этот счетчик будет " регистрах", пора переквалифицироваться в управдомы....

Цитата
Не для этого - от volatile в описаном случае может быть только еще хуже.

Отнюдь не только это.

Посмотрите, сколько отводится bool в MSP430. Нужны флаги? Отлично, вот и описывайте отдельные биты в int и пользуйте.


Привычка идет с других компиляторов sad.gif

Цитата
sizeof(bool) дает результат 1. В 8-ми битный char (байт) можно 8 флагов напихать, а в 16-и битный int - 16. Где же тут экономия?


Это говорит только о низком качестве компилятора.
Hi-Tech, к примеру, группирует битовые пеерменный в байты.
Т.е. 10 битовых переменных будут занимать 2 байта а не 10.
В ИАР это тоже сделать можно, но "ручками".
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 9 2009, 19:59
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Allregia @ Sep 9 2009, 21:11) *
Я там выше упомянул "статическую".
Статическую переменную в регистрах?!
....
пора переквалифицироваться в управдомы....

Да, видимо да, раз нет понятия о базовых понятиях, в частности, что количество команд работы с памятью и их функциональность ограничена. Посему так или иначе при сколь-нибудь сложных действиях производится перегрузка и быстрая работа с переменной в ргегистрах. volatile этому изрядно не способствует.
Цитата
Привычка идет с других компиляторов sad.gif

Компилятор тут ни причем - сама возможность определяется архитектурой контроллера. Полагаясь на такой "сервис" получаем жесткую платформенную зависимость - короче, как уже писал, вреда больше чем пользы.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Sep 9 2009, 20:29
Сообщение #18


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(Allregia @ Sep 9 2009, 22:11) *
Это говорит только о низком качестве компилятора.
Hi-Tech, к примеру, группирует битовые пеерменный в байты.

Это говорит о низком знании препроцессора.
Группировка флагов в байт/слово занимает пару строчек, но обеспечивает независимость от платформы.


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
Allregia
сообщение Sep 9 2009, 21:07
Сообщение #19


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763



Цитата(Dog Pawlowa @ Sep 9 2009, 23:29) *
Это говорит о низком знании препроцессора.
Группировка флагов в байт/слово занимает пару строчек, но обеспечивает независимость от платформы.


Это говорит о невнимательности, при чтении сообщений.
О том, что это "можно сделать ручками" - я писал выше.
Или может надо было явно упомянуть "используя препроцессор" ?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 10 2009, 06:25
Сообщение #20


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Allregia @ Sep 9 2009, 23:07) *
О том, что это "можно сделать ручками" - я писал выше.

Это говорит о том, что если "ручками", Вам кажется сложнее, нежели через непереносимый хайтековский typedef bit bool, то видимо, надо изучать возможности представляемые препроцессором более широко.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
VAI
сообщение Sep 10 2009, 06:43
Сообщение #21


Профессионал
*****

Группа: Модераторы
Сообщений: 1 120
Регистрация: 17-06-04
Пользователь №: 37



Я флаги так делаю:
Описываю
Код
enum on_off               { OFF, ON, POH = OFF };

typedef struct              // самый первый - самым младшим битом
{ unsigned Start_motor   : 1;
  unsigned m_prtcl       : 1;
  unsigned redirect      : 1;
  unsigned enable_fuzzy0 : 1;
  unsigned enable_fuzzy1 : 1;
  unsigned enable_test_Ux: 1;
  unsigned enable_myrg   : 1;
  unsigned rst_measure   : 1;
  unsigned yes_measure   : 1;
  unsigned cls_ind       : 1;
  unsigned cursor_on     : 1;
  unsigned lcd_busy      : 1;
  unsigned power_pressed : 1;
  unsigned to_calibration: 1;
  unsigned error_print   : 1;
  unsigned debug_ind     : 1;
  unsigned debug         : 1;
  unsigned in_align      : 1;
} FLAG;

Объявляю в файле с глобальными переменными
Код
volatile FLAG flag;

Для других файлов
Код
extern volatile FLAG flag;

Примеры использования:
Код
flag.cls_ind = ON;

if ( flag.enable_fuzzy1 == OFF )
  T1_duty = 0;


2 Allregia - почаще смотрите асм-листинг, который генерит компилятор...


--------------------
Если зайца бить, его можно и спички научить зажигать
Сколько дурака не бей - умнее не будет. Зато опытнее
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Sep 10 2009, 07:28
Сообщение #22


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(Allregia @ Sep 10 2009, 00:07) *
Это говорит о ...

Ручки ручкам рознь, и использование препроцессора тоже бывает разным.


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
Allregia
сообщение Sep 12 2009, 10:24
Сообщение #23


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763



Кстати о препроцессоре, хотя это немного не в тему - вот на другом форуме нашел полезное, для работы с двоичными константами:

Код
Можно так:
#define byte unsigned char

#define _bitset(bits)\
  ((byte)(\
  (bits%010)|\
  (bits/010%010)<<1|\
  (bits/0100%010)<<2|\
  (bits/01000%010)<<3|\
  (bits/010000%010)<<4|\
  (bits/0100000%010)<<5|\
  (bits/01000000%010)<<6|\
  (bits/010000000%010)<<7))

#define BIN8(bits)   _bitset(0##bits)
#define BIN16(bitsH,bitsL)  (unsigned(BIN8(bitsL)) + unsigned((BIN8(bitsH)<<8)))

Использование:
k = BIN8(0x11001010);


Может кому пригодится.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 12 2009, 10:30
Сообщение #24


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Allregia @ Sep 12 2009, 12:24) *
Может кому пригодится.

Такой полный мрак? Нет! Тем более, что использование неименованных констант, даже если они не бинарнообразные, само по себе верный путь к ошибкам.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Allregia
сообщение Sep 12 2009, 13:44
Сообщение #25


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763



Можно использовать и как именнованные:

#define PORT0DIR BIN8(0b1001100)

smile.gif

А также во всех других случаях, когда двоичное удобнее шестнадцатеричной, десятичной или восьмеричной.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 12 2009, 14:04
Сообщение #26


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Allregia @ Sep 12 2009, 15:44) *
А также во всех других случаях, когда двоичное удобнее шестнадцатеричной, десятичной или восьмеричной.

Только таких случаев нет, это я, как человек отдавший многие годы ASM и по неопытности раньше пользовавший всякие 'b', говорю. То, Вы привели в примере именования, это просто глупость, ибо неименованы именно биты и/или их группы.
Кстати, в своей 'удобной' записи, поминая ее два раза, оба раза ошиблись sad.gif
Цитата
Использование:
k = BIN8(0x11001010);

#define PORT0DIR BIN8(0b1001100)

Вот такое само за себя говорящее 'удобство' smile.gif
P.S.
Использование
Цитата
#define byte unsigned char

вместо typedef это дополнительный признак неведения, что творите.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Allregia
сообщение Sep 12 2009, 15:03
Сообщение #27


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763



Цитата(zltigo @ Sep 12 2009, 17:04) *
Только таких случаев нет, это я, как человек отдавший многие годы ASM и по неопытности раньше пользовавший всякие 'b', говорю. То, Вы привели в примере именования, это просто глупость, ибо неименованы именно биты и/или их группы.
Кстати, в своей 'удобной' записи, поминая ее два раза, оба раза ошиблись sad.gif


Во 1-х, она не моя, говорил же - это подсмотрено на другом форуме.
Во 2-х - да, там ошибка, х вместо b.
Цитата
Использование

вместо typedef это дополнительный признак неведения, что творите.


См. выше. Мелкие недочеты можно и исправить.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 12 2009, 15:19
Сообщение #28


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Allregia @ Sep 12 2009, 17:03) *
Во 1-х, она не моя, говорил же - это подсмотрено на другом форуме.
Во 2-х - да, там ошибка, х вместо b.

Я сказал ОБА раза smile.gif c 'b' - тоже неправильно sad.gif.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Allregia
сообщение Sep 12 2009, 15:33
Сообщение #29


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763



Согласен, с тем макросом должно быть просто BIN8(1001100), без 0b.

0b - это в High Tech
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Sep 12 2009, 15:37
Сообщение #30


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Всё больше утверждаюсь во мнении, что High Tech (да и PIC вообще) уродует мозги людям smile.gif


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 06:28
Рейтинг@Mail.ru


Страница сгенерированна за 0.01503 секунд с 7
ELECTRONIX ©2004-2016