|
Прерывания |
|
|
|
Sep 9 2009, 19:11
|
Профессионал
    
Группа: Свой
Сообщений: 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 и пользуйте. Привычка идет с других компиляторов  Цитата sizeof(bool) дает результат 1. В 8-ми битный char (байт) можно 8 флагов напихать, а в 16-и битный int - 16. Где же тут экономия? Это говорит только о низком качестве компилятора. Hi-Tech, к примеру, группирует битовые пеерменный в байты. Т.е. 10 битовых переменных будут занимать 2 байта а не 10. В ИАР это тоже сделать можно, но "ручками".
|
|
|
|
|
Sep 9 2009, 19:59
|

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

|
Цитата(Allregia @ Sep 9 2009, 21:11)  Я там выше упомянул "статическую". Статическую переменную в регистрах?! .... пора переквалифицироваться в управдомы.... Да, видимо да, раз нет понятия о базовых понятиях, в частности, что количество команд работы с памятью и их функциональность ограничена. Посему так или иначе при сколь-нибудь сложных действиях производится перегрузка и быстрая работа с переменной в ргегистрах. volatile этому изрядно не способствует. Цитата Привычка идет с других компиляторов  Компилятор тут ни причем - сама возможность определяется архитектурой контроллера. Полагаясь на такой "сервис" получаем жесткую платформенную зависимость - короче, как уже писал, вреда больше чем пользы.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Sep 9 2009, 21:07
|
Профессионал
    
Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763

|
Цитата(Dog Pawlowa @ Sep 9 2009, 23:29)  Это говорит о низком знании препроцессора. Группировка флагов в байт/слово занимает пару строчек, но обеспечивает независимость от платформы. Это говорит о невнимательности, при чтении сообщений. О том, что это "можно сделать ручками" - я писал выше. Или может надо было явно упомянуть "используя препроцессор" ?
|
|
|
|
|
Sep 10 2009, 06:25
|

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

|
Цитата(Allregia @ Sep 9 2009, 23:07)  О том, что это "можно сделать ручками" - я писал выше. Это говорит о том, что если "ручками", Вам кажется сложнее, нежели через непереносимый хайтековский typedef bit bool, то видимо, надо изучать возможности представляемые препроцессором более широко.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Sep 10 2009, 06:43
|

Профессионал
    
Группа: Модераторы
Сообщений: 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 - почаще смотрите асм-листинг, который генерит компилятор...
--------------------
Если зайца бить, его можно и спички научить зажигать Сколько дурака не бей - умнее не будет. Зато опытнее
|
|
|
|
|
Sep 12 2009, 10:24
|
Профессионал
    
Группа: Свой
Сообщений: 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); Может кому пригодится.
|
|
|
|
|
Sep 12 2009, 14:04
|

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

|
Цитата(Allregia @ Sep 12 2009, 15:44)  А также во всех других случаях, когда двоичное удобнее шестнадцатеричной, десятичной или восьмеричной. Только таких случаев нет, это я, как человек отдавший многие годы ASM и по неопытности раньше пользовавший всякие 'b', говорю. То, Вы привели в примере именования, это просто глупость, ибо неименованы именно биты и/или их группы. Кстати, в своей 'удобной' записи, поминая ее два раза, оба раза ошиблись  Цитата Использование: k = BIN8(0x11001010);
#define PORT0DIR BIN8(0b1001100) Вот такое само за себя говорящее 'удобство'  P.S. Использование Цитата #define byte unsigned char вместо typedef это дополнительный признак неведения, что творите.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Sep 12 2009, 15:03
|
Профессионал
    
Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763

|
Цитата(zltigo @ Sep 12 2009, 17:04)  Только таких случаев нет, это я, как человек отдавший многие годы ASM и по неопытности раньше пользовавший всякие 'b', говорю. То, Вы привели в примере именования, это просто глупость, ибо неименованы именно биты и/или их группы. Кстати, в своей 'удобной' записи, поминая ее два раза, оба раза ошиблись  Во 1-х, она не моя, говорил же - это подсмотрено на другом форуме. Во 2-х - да, там ошибка, х вместо b. Цитата Использование
вместо typedef это дополнительный признак неведения, что творите. См. выше. Мелкие недочеты можно и исправить.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|