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

 
 
4 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> IAR меня игнорирует . :(, Причем , молча.... собака!
muravei
сообщение Sep 17 2009, 10:47
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 538
Регистрация: 13-08-05
Пользователь №: 7 591



Подскажите, как правильно (и каасиво) проверять пины в условии if . ( AVR)
Go to the top of the page
 
+Quote Post
Rst7
сообщение Sep 17 2009, 10:57
Сообщение #2


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Случилось-то что?

Я всегда так делаю:
Код
#define BUTTON_INP PINC_Bit3
...
if (BUTTON_INP) blablabla...


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
dimka76
сообщение Sep 17 2009, 11:18
Сообщение #3


developer
****

Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032



Цитата(Rst7 @ Sep 17 2009, 14:57) *
Я всегда так делаю:
Код
#define BUTTON_INP PINC_Bit3


тогда уж напишите как вы определяете
Код
PINC_Bit3


--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
Go to the top of the page
 
+Quote Post
Rst7
сообщение Sep 17 2009, 11:22
Сообщение #4


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
тогда уж напишите как вы определяете


В названии темы фигурирует IAR в инкарнации AVR. Вы когда-нибудь интересовались, как в .h-файлах, входящих в стандартную поставку EWAVR описана периферия поддерживаемых камней?


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
dimka76
сообщение Sep 17 2009, 11:29
Сообщение #5


developer
****

Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032



Цитата(Rst7 @ Sep 17 2009, 15:22) *
В названии темы фигурирует IAR в инкарнации AVR. Вы когда-нибудь интересовались, как в .h-файлах, входящих в стандартную поставку EWAVR описана периферия поддерживаемых камней?


Нет. У меня IAR 4.30. Сделал поиск файлов, содержащих текст PINC_Bit3 в папке inc и поиск не дал результата. Вот так.


--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
Go to the top of the page
 
+Quote Post
Rst7
сообщение Sep 17 2009, 11:35
Сообщение #6


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
Сделал поск файлов, содержащих текст PINC_Bit3 в папке inc и поиск не дал результата.


Вы не поверите. Этого текста там действительно нет biggrin.gif


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
Goodefine
сообщение Sep 17 2009, 11:35
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 211
Регистрация: 6-08-07
Из: Приднестровье, Тирасполь
Пользователь №: 29 581



Не мучайтесь smile.gif
Код
#define PINC_Bit3 PINC&(1<<3)


--------------------
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
Go to the top of the page
 
+Quote Post
Rst7
сообщение Sep 17 2009, 11:36
Сообщение #8


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
Не мучайтесь


Ответ неверный.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
Goodefine
сообщение Sep 17 2009, 11:38
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 211
Регистрация: 6-08-07
Из: Приднестровье, Тирасполь
Пользователь №: 29 581



Цитата(Rst7 @ Sep 17 2009, 14:36) *
Ответ неверный.

Это не к IAR-у. Это вообще...


--------------------
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
Go to the top of the page
 
+Quote Post
dimka76
сообщение Sep 17 2009, 11:42
Сообщение #10


developer
****

Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032



Цитата(Rst7 @ Sep 17 2009, 15:35) *
Этого текста там действительно нет biggrin.gif


Тогда причем тут
Цитата
Вы когда-нибудь интересовались, как в .h-файлах, входящих в стандартную поставку EWAVR описана периферия поддерживаемых камней?


--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
Go to the top of the page
 
+Quote Post
Rst7
сообщение Sep 17 2009, 11:47
Сообщение #11


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
Это не к IAR-у. Это вообще...


Хотите, в GCC так сделаю? Будет работать. Причем, не только if (PINC_Bit3), но и PINC_Bit3=1, что, как Вы понимаете, с Вашим define'ом невозможно.

Цитата
Тогда причем тут


Как это причем? Вы что, думаете, что способ описания PINC_Bit3 может быть только один и это
Код
#define PINC_Bit3 чего-то

? Если да, то Вы ошибаетесь.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
Goodefine
сообщение Sep 17 2009, 11:53
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 211
Регистрация: 6-08-07
Из: Приднестровье, Тирасполь
Пользователь №: 29 581



Цитата(Rst7 @ Sep 17 2009, 14:47) *
Хотите, в GCC так сделаю? Будет работать. Причем, не только if (PINC_Bit3), но и PINC_Bit3=1, что, как Вы понимаете, с Вашим define'ом невозможно.

Понимаю, конечно. Но вопрошающему:
Цитата
Подскажите, как правильно (и каасиво) проверять пины в условии if . ( AVR)

думаю, для начала, достаточно...


--------------------
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
Go to the top of the page
 
+Quote Post
Rst7
сообщение Sep 17 2009, 11:55
Сообщение #13


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
думаю, для начала, достаточно...


При условиях, указанных топикстартером, Ваш #define - лишний.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
dimka76
сообщение Sep 17 2009, 11:56
Сообщение #14


developer
****

Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032



Цитата(Rst7 @ Sep 17 2009, 15:47) *
Вы что, думаете, что способ описания PINC_Bit3 может быть только один


Уж не #define SFR_B_BITS вы имеете ввиду


--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
Go to the top of the page
 
+Quote Post
Rst7
сообщение Sep 17 2009, 11:58
Сообщение #15


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
Уж не #define SFR_B_BITS вы имеете ввиду


Например его.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
dimka76
сообщение Sep 17 2009, 12:02
Сообщение #16


developer
****

Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032



Цитата(Rst7 @ Sep 17 2009, 15:58) *
Например его.


А что есть еще варианты?


--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
Go to the top of the page
 
+Quote Post
Rst7
сообщение Sep 17 2009, 12:05
Сообщение #17


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
А что есть еще варианты?


Конкретно в IAR'е для AVR этот макрос разворачивает union со всякими собственными диалектическими словами типа __io и @. Можно реализовать и более стандартно, путем организации приведения типов.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
dimka76
сообщение Sep 17 2009, 12:10
Сообщение #18


developer
****

Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032



Цитата(Rst7 @ Sep 17 2009, 16:05) *
Конкретно в IAR'е для AVR этот макрос разворачивает union со всякими собственными диалектическими словами типа __io и @. Можно реализовать и более стандартно, путем организации приведения типов.


если Вы имеете ввиду это
Код
/*==========================*/
/* Predefined SFR Addresses */
/*==========================*/

/****************************************************************************
* An example showing the SFR_B() macro call,
* the expanded result and usage of this result:
*
* SFR_B(AVR,   0x1F) Expands to:
* __io union {
*             unsigned char AVR;                 // The sfrb as 1 byte
*             struct {                           // The sfrb as 8 bits
*                     unsigned char AVR_Bit0:1,
*                                   AVR_Bit1:1,
*                                   AVR_Bit2:1,
*                                   AVR_Bit3:1,
*                                   AVR_Bit4:1,
*                                   AVR_Bit5:1,
*                                   AVR_Bit6:1,
*                                   AVR_Bit7:1;
*                    };
*            } @ 0x1F;
* Examples of how to use the expanded result:
* AVR |= (1<<5);
* or like this:
* AVR_Bit5 = 1;
***************************************************************************/


То в моей версии IAR, как видите, это закоментировано и дано как образец. Т.е. это все самому прописывать надо


--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
Go to the top of the page
 
+Quote Post
Rst7
сообщение Sep 17 2009, 12:24
Сообщение #19


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
То в моей версии IAR, как видите, это закоментировано и дано как образец. Т.е. это все самому прописывать надо


Шутите? Это комментарий. На самом деле надо поставить в свойствах проекта галочку "Enable Bit Definition in I/O-Include files". Либо разместить то ли в предопределенных символах, то ли перед #include <ioavr.h> определение ENABLE_BIT_DEFINITIONS


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
dimka76
сообщение Sep 17 2009, 12:29
Сообщение #20


developer
****

Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032



Все разобрался.
В файле iom<номер контроллера>.h есть объявление SFR_B(PINC, 0x13), а также подключен зыголовочный файл iomacro.h, в котором SFR_B определено как

Код
#define SFR_B(_NAME, _ADDR) SFR_B_BITS(_NAME, _ADDR, \
                                    Bit0,Bit1,Bit2,Bit3,Bit4,Bit5,Bit6,Bit7)



В свою очередь SFR_B_BITS определено как

Код
#define SFR_B_BITS(_NAME, _ADDR, _A,_B,_C,_D,_E,_F,_G,_H) \
    __io union { \
      unsigned char   _NAME;           /* The sfrb as 1 byte */ \
      struct {                        /* The sfrb as 8 bits */ \
        __BYTEBITS(_NAME, _A,_B,_C,_D,_E,_F,_G,_H) \
      };  \
    } @ _ADDR;


--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
Go to the top of the page
 
+Quote Post
Rst7
сообщение Sep 17 2009, 12:40
Сообщение #21


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Ойц. Прошу прощения. Enable Bit Definition - это даже еще более веселее. Это можно типа так написать
Код
if (TIFR_TOV1) blablabla...


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Sep 17 2009, 16:34
Сообщение #22


Гуру
******

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



Цитата(dimka76 @ Sep 17 2009, 15:02) *
А что есть еще варианты?

Вариантов полно, главное проявить фантазию
Мне, из-за моей забывчивости и постоянного переключения между проектами , нравится типа так:
if (GetPin(ALARM_BUTTON)) SetPin(LOCK_THE_DOOR);
Ну а дальше работает оптимизация, приводящая все к нескольким командам.


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


Гуру
******

Группа: Свой
Сообщений: 2 538
Регистрация: 13-08-05
Пользователь №: 7 591



Цитата(Dog Pawlowa @ Sep 17 2009, 20:34) *
Вариантов полно, главное проявить фантазию

А почему так : if ((PIND & 0x04)==0)...
прокатывало , а уже вот так : if ((PIND & 0x02)==0) ..... нет ? sad.gif
Go to the top of the page
 
+Quote Post
Sergey'F
сообщение Sep 17 2009, 19:26
Сообщение #24


Местный
***

Группа: Свой
Сообщений: 351
Регистрация: 17-09-05
Из: Москва
Пользователь №: 8 660



Может дело не в IAR?
- не включена ли альтернативная функция (некоторые сажают вход на регистр PIND на 0)?
- где-то ошиблись с DDRD и в результате конфликт и считывание неправильного значения.
- ножка сгорела, наконец?
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Sep 17 2009, 20:01
Сообщение #25


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Кстати в IAR для ARM тоже можно кое чего. smile.gif
Например:
PINSEL1_bit.P0_27 = 1; // TRST
или
U0FCR_bit.FCRFE=1; // Разрешить фифо
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 17 2009, 20:18
Сообщение #26


Гуру
******

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



Цитата(SasaVitebsk @ Sep 17 2009, 22:01) *
Кстати в IAR ...

Баловство все эти фирменные навороты или навороченные (переболел в свое время) макросы. Портам имена и алиасы, биты/поля именовать и обыденных очевидных средств более чем достаточно, читабельно, портируемо, лаконично! и не заставляет вспоминать что это тут наворотил. Повторяющиеся вещи в разумные специализированные (а не "универсальные" макросы) или inline.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
rezident
сообщение Sep 17 2009, 20:49
Сообщение #27


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(SasaVitebsk @ Sep 18 2009, 02:01) *
PINSEL1_bit.P0_27 = 1; // TRST
или
U0FCR_bit.FCRFE=1; // Разрешить фифо

Не нравятся мне эти битовые поля и union-ы. sad.gif
ИМХО битовые маски рулят! smile.gif
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Sep 17 2009, 21:00
Сообщение #28


Гуру
******

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



Цитата(zltigo @ Sep 17 2009, 23:18) *
Баловство все эти фирменные навороты или навороченные (переболел в свое время) макросы....

Где все-таки грань навороченности макросов, не только для портов?
Я наоборот, от простых макросов описания конкретных портов перехожу к более универсальным.

Ниже - перебор? (много поскипано, но идея, думаю, понятна)

Код
  OUTPUT  (   PulseWdt        ,   P1  , 0x01    )
  INPUT   (   KeyStIn         ,   ~P1 , 0x10    )
...
#pragma inline=forced
unsigned char GetPin(unsigned int name);
#pragma inline=forced
void  OnPin(unsigned int name);
...
// generation of inputs functions
unsigned char GetPin( unsigned int name)
{ switch (name) {
#define INPUT( name, port, bit)  case name: return (port##IN & bit);
#include pins_file
default: return 0; } }


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


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(Dog Pawlowa @ Sep 18 2009, 03:00) *
Где все-таки грань навороченности макросов, не только для портов?

Грань на границе HAL стоит.
Цитата(Dog Pawlowa @ Sep 18 2009, 03:00) *
Я наоборот, от простых макросов описания конкретных портов перехожу к более универсальным.
Зачем? Опишите функцию (имею в виду не программное понятие, а функциональную модель аппаратуры), которую выполняет hardware и работайте дальше с этой абстракцией. Все равно то, что в пределах HAL лежит аппаратнозависимо и некроссплатформенно. Нафига зачем какие-то универсальные порты описывать-то? wacko.gif
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Sep 17 2009, 21:29
Сообщение #30


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

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



Цитата(Dog Pawlowa @ Sep 18 2009, 03:00) *
Ниже - перебор? (много поскипано, но идея, думаю, понятна)


Так есть же макросы имени Волкова. Очень удобно.

Я так привык к ним, что для плюсов тоже соорудил аналог, правда для stm32 и msp430. smile.gif


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 17 2009, 21:42
Сообщение #31


Гуру
******

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



Цитата(AHTOXA @ Sep 17 2009, 23:29) *
удобно.

Нафиг лишние сущности.


Цитата(rezident @ Sep 17 2009, 23:07) *
Опишите функцию (имею в виду не программное понятие, а функциональную модель аппаратуры), которую выполняет hardware..

Именно так. Иначе за ненужной "универсальностью" ногодрыгания теряется смысл нужной функциональной универсальности.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Sep 17 2009, 22:02
Сообщение #32


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

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



Цитата(zltigo @ Sep 18 2009, 03:42) *
Нафиг лишние сущности.


Ваше мнение понятно, зачем повторяться?

----
Кто-то пишет HAL, кому-то хватает макросов.
У меня в разных проектах на AVR, MB90, MSP430 и STM32 используется, например, один и тот же файл dflash.c:

Код
void df_init(void)
{
    off(FLASH_CS);
    direct(FLASH_CS, O);
}
...
void df_read(...)
{
    on(FLASH_CS);
...
}


Меняется только файл с макросами (под процессор), и описание ноги чипселекта (под схему, в отдельном инклюде).

Ну и чем это не HAL? И где здесь лишние сущности?


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 17 2009, 22:31
Сообщение #33


Гуру
******

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



Цитата(AHTOXA @ Sep 18 2009, 00:02) *
Ну и чем это не HAL?

Для тех, кто пишет контроллеры светодиодов это может и "HAL" а для меня это махание ножкой через заднепроходное отверстие.
Вместо одной походя написанной банальной и однозначно читаемой строчки.
Когда нужно ПОНЯТНО согласовано и эффективно махать хотя-бы несколькими пинами, все эти макросы или идут лесом, или становятся совершенно невразумительными. Глупо обсуждать разнообразные способы лепки куличей из песка - эти "проблемы" интересны только младшей ясельной группе. А лично я уже давно вырос smile.gif.
Для меня, например, уровень абстракции даже для банального светодиода совсем другой:
Код
typedef enum{
    LM_OFF = 0,
    LM_ON,
    LM_BLINK_SLOW,
    LM_BLINK_NORMAL,
    LM_BLINK_FAST,
    LM_FLASH_1,
    LM_FLASH_2,
    LM_FLASH_3,
    LM_FLASH_1_OFF,
    LM_FLASH_2_OFF,
    LM_MAX

} led_mode_e;

void led_mode( bint led, led_mode_e mode )
{
    if( mode >= LM_MAX )
        mode = LM_MAX-1;
    ledstat &= ((~0x11111111)  <<led);
    ledstat |= (led_const[mode]<<led);
}
led_mode( LED_RED, LM_BLINK_FAST );

И где-то уже дальше-дальше в самом конце
Код
void led_process( int counter )
{
..........

    if( curstat )
        IOlCLR = curstat;
    
    curstat = (~curstat)&(P_LED_RED|P_LED_GREEN|P_LED_INUSE|P_LED_TEST);
    
    if( curstat )
        IOlSET = curstat;
}

И потуги на дивные навороты на банальном включить/выключить "светодиод" мне, как минимум, не интересны.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Sep 17 2009, 23:06
Сообщение #34


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

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



Цитата(zltigo @ Sep 18 2009, 04:31) *
Для тех, кто пишет контроллеры светодиодов это может и "HAL" а для меня это махание ножкой через заднепроходное отверстие.
Вместо одной походя написанной банальной и однозначно читаемой строчки.
Одна понятная строчка, индивидуальная для каждого проекта vs одна понятная строчка на все проекты. Что лучше? Имхо, ответ очевиден.
Цитата
Когда нужно ПОНЯТНО согласовано и эффективно махать хотя-бы несколькими пинами, все эти макросы или идут лесом, или становятся совершенно невразумительными.

Когда приходится согласованно махать несколькими пинами - надо использовать возможности периферии. Вручную махать эффективно всё равно не выйдет. Если до такого дошло, надо что-то править в консерватории.
Цитата
Глупо обсуждать разнообразные способы лепки куличей из песка - эти "проблемы" интересны только младшей ясельной группе. А лично я уже давно вырос smile.gif .

Ох, не похожеsad.gif
Цитата
Для меня, например, уровень абстракции даже для банального светодиода совсем другой:

Таки балуетесь "контроллерами светодиодов"? wink.gif


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
dxp
сообщение Sep 18 2009, 04:32
Сообщение #35


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Вопрос не по теме, пардон.

Цитата(zltigo @ Sep 18 2009, 05:31) *
Код
typedef enum{
    LM_OFF = 0,


Зачем тут явная инициализация?


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Sep 18 2009, 04:54
Сообщение #36


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(dxp @ Sep 18 2009, 08:32) *
Зачем тут явная инициализация?

Для наглядности, я тоже так всегда делаю.
Код
enum eAnswerCommonParameters
{
    acp_Preamble = 0,           // преамбула
    acp_Status,                 // слово состояния
    acp_Ktermo_0,               // коэффициент термокомпенсации
    acp_Ktermo_1,
    acp_Ktermo_2,               //
    acp_Ktermo_3,
    acp_Csens_0,                // постоянная датчика
    acp_Csens_1,
    acp_Csens_2,
    acp_Csens_3,
    acp_Rt0_x_10_Low,           // калибровочная константа датчика температуры
    acp_Rt0_x_10_Hi,
    acp_Rref_x_10_Low,          // сопротивление опорного резистора термоканала
    acp_Rref_x_10_Hi,
    acp_CS,
    acp_PacketLen
};


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 18 2009, 07:27
Сообщение #37


Гуру
******

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



Цитата(AHTOXA @ Sep 18 2009, 01:06) *
Если до такого дошло, надо что-то править в консерватории.

Давайте покажите мастеркласс обновления консерватории, например, переписав ногомахание для одного из примитивов работы с LCD:
Код
void lcd_writedata( bint data )
{
    lcd_waitready( RDY_DATA|RDY_COMMAND );
    // Setup DATA
    PIOlCLR = T6963_CE|T6963_WR|T6963_CD|(0xFFUL<<T6963_D0);
    PIOlSET = (data & 0xFFUL) << T6963_D0;
    PIOlSET = T6963_CE|T6963_WR;
    PIOlSET = T6963_CD;
}

Вышеприведенное, на мой взгляд описание одной простейшей операции с LCD. Рассыпать ее на более мелкие ногодрыгания одиночных пинов в стиле " on(FLASH_CS)" просто гробить и здравый смысл и программу.
Всякие навороченные макросы БЕЗУСЛОВНО полезно читать, разбирать, уметь писать и ПРИМЕНЯТЬ - это упражнение для ума, приобретение навыков и прочеее.... Макросы того-же Волкова это типа шахматного этюда и с этой точки зрения они ОЧЕНЬ полезны. Но реальное программирование отличается, как реальная игра а шахматы от решения надуманных шахматных этюдов. К реальному программированию такого типа макросы можно притянуть только за уши. Нет, конечно, многие так делают и считают использование подобных "штампов" и трюков признаком мастерства sad.gif. Но совершенно зря.
Цитата
Таки балуетесь "контроллерами светодиодов"? wink.gif

Разумеется. Только не контроллерами светодиодов, а устройствами на которых помимо всего прочего железа из которого чип контроллера обычно самый маленький, есть и светодиоды. И я ими разнообразно мигаю, только не на уровне примитива on( RED_LED ) - слишком примитивно sad.gif
Хотя встречаются и почти чистые контроллеры светодиодов - месяц назад 64 светодиода и 32 кнопки на голой ATmega16 походя написал. И даже ума не приложу через какую задницу там можно было макросы типа приведенных Вами использовать sad.gif, хотя вся "программа" это чистое, как слеза, ногодрыгание и переноситься на три варианта конструкции-разводки.

Цитата(dxp @ Sep 18 2009, 06:32) *
Зачем тут явная инициализация?

Банальная наглядность - уточнение с долей привычки. Абсолютно безобидная привычка.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Sep 18 2009, 08:12
Сообщение #38


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

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



Цитата(zltigo @ Sep 18 2009, 13:27) *
Давайте покажите мастеркласс, например, переписав ногомахание для одного из примитивов работы с LCD:
Я где-то призывал использовать макросы Волкова повсеместно? Всему своё место и время.
Цитата
Вышеприведенное, на мой взгляд описание одной простейшей операции с LCD. Рассыпать ее на более мелкие ногодрыгания одиночных пинов в стиле " on(FLASH_CS)" просто гробить и здравый смысл и программу.
Вы говорите какие-то банальности. Даже несерьёзно. Расскажите ещё, что при 16-битной шине использовать "on(FLASH_CS)" глупоsmile.gif
Однако же, существует SPI с его чипселектами, множество микросхем имеет ножки готовности (опять же одиночные), да мало ли примеров одиноких ножек, замечательно ложащихся под эти макросы.
Цитата
Всякие навороченные макросы БЕЗУСЛОВНО полезно читать, разбирать, уметь писать и ПРИМЕНЯТЬ - это упражнение для ума, приобретение навыков и прочеее....
Да что же в них навороченного-то? Там всё достаточно прозрачно. Это просто полезные макросы.
Цитата
Но реальное программирование отличается, как реальная игра а шахматы от решения надуманных шахматных этюдов. К реальному программированию такого типа макросы можно притянуть только за уши. Нет, конечно, многие так делают и считают использование подобных "штампов" и трюков признаком мастерства sad.gif . Но совершенно зря.
Я так понимаю, под "реальным программистом" вы имеете в виду себя? smile.gif
У меня несколько другое представление о реальном программировании. Реальное программирование - это когда человек способен применять разнообразные инструменты и приёмы в зависимости от задачи. А ваш подход больше напоминает узколобый догматизм, уж извините.
Цитата
месяц назад 64 светодиода и 32 кнопки на голой ATmega16 походя написал. И даже ума не приложу через какую задницу там можно было макросы типа приведенных Вами использовать sad.gif
Ну и о чём это говорит? О том что инструмент плохой? Нет. Просто неподходящий для данного конкретного случая.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Sep 18 2009, 08:44
Сообщение #39


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(zltigo @ Sep 17 2009, 23:18) *
Баловство все эти фирменные навороты или навороченные (переболел в свое время) макросы.

biggrin.gif

Там (ARM7) кстати не всегда и применишь данные макросы. Смотреть надо. Не везде однозначность.
Например установка бита, порождает конструкцию вида чтение-модификация-запись. То есть, если есть флаги (попутные), которые сбрасываются единицей, то они уйдут незаметно. smile.gif Что-то я ищё подобное для себя отмечал.

Короче, в общем случае, порождает неоднозначность. То есть порождает отрыв программиста от железа. Когда человек пишет "установить бит в 1" то он не учитывает попутные действия компилятора.

Поэтому, если честно, я тоже не пользуюсь такими конструкциями ни в AVR ни в ARM. smile.gif Не хочется запоминать и анализировать. smile.gif

Но в инициализации применял, для наглядности. Сразу видно.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 18 2009, 09:15
Сообщение #40


Гуру
******

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



Цитата(AHTOXA @ Sep 18 2009, 10:12) *
Ну и о чём это говорит? О том что инструмент плохой? Нет. Просто неподходящий для данного конкретного случая.

Когда некий инструмент подходит исключительно для очень конкретного И ПРОСТЕЙШЕГО случая, а рядом с этим случаем, в этом-же проекте 99 других случаев идущих в разрез с этим "инструментом" sad.gif. Причем инструменты оставшиеся задачи спокойно решают и "конкретную" задачу, то поминаемый Вам "хороший" инструмент становится именно той лишней сущностью sad.gif. А его использование, как Вы там сказали -
"напоминает узколобый догматизм, уж извините."
Цитата
Однако же, существует SPI с его чипселектами, множество микросхем имеет ножки готовности (опять же одиночные)....

SPI? Их есть у нас. Вот, например:
Код
__arm void send_spi_start_int( SPI_bcb *sp, int data )
{
    IO0CLR = sp->msel;
    S0SPDR  = data;                       // Data
    if( S0SPSR_check() )
        return;
    IO0SET = P0B_S0SEL_MASK;
    sp->flag &= (~BCB_TX_START);
}

int work_spi_modgal( bint modul, WORD adrdat )
{
int i = 1000; // Total timeout

    if( modul )
        IO0CLR = P0B_M1_CSEL;
    else
        IO0CLR = P0B_M0_CSEL;
    do     // Timeout if not ready
    {   IO0CLR = S0SSEL_SOFT;
        if( !(IO0PIN & P0B_MX_RDY)  )          // Ready?
        {   IO0CLR = P0B_MX_AC;                // Select 'Address' byte
            S0SPDR = (adrdat>>8);             // Send Hi byte(address)
            if( S0SPSR_check() )            // Wait end of transmit
                goto dsl_exit_error;
            IO0SET = (S0SSEL_SOFT|P0B_MX_AC);        // Disable Select and set 'Data'
            do     // Timeout if not ready
            {    IO0CLR = S0SSEL_SOFT;        // Select
                if( !(IO0PIN & P0B_MX_RDY)  )      // Ready?
                {   S0SPDR = adrdat;              // Send Lo byte(data/dummy)
                    if( S0SPSR_check() )        // Wait end of transmit
                        goto dsl_exit_error;
                    IO0SET = (P0B_MASK_CSEL|S0SSEL_SOFT|P0B_MX_AC); // Disable SHDSL
                    return( S0SPDR );              // Get any data
                }
                IO0SET = S0SSEL_SOFT;    // Disable Select
                delay_us( 10 );
                i--;
            }
            while( i > 0 );
        }
        IO0SET = S0SSEL_SOFT;    // Disable Select
        delay_us( 10 );
        i--;
    }
    while( i > 0 );
dsl_exit_error:
    IO0SET = (P0B_MASK_CSEL|S0SSEL_SOFT|P0B_MX_AC); // Disable SHDSL
    return( -1 );
}

Куда прикажете вставлять макрос для махания shipselect?

Цитата
...да мало ли примеров одиноких ножек, замечательно ложащихся под эти макросы.

Ничножно мало и повторюсь еще раз, рядом с этими одиночными "замечательно ложащимися" еще куча не одиночных... Плодить лишнюю сущность для работы с 1-2 одиночными, когда рядом еще десятки "неудобных" пинов просто незачем.


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


Гуру
******

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



Цитата(AHTOXA @ Sep 18 2009, 00:29) *
Так есть же макросы имени Волкова. Очень удобно.

Спасибо за ссылку. Я сделал немного по другому по сравнению с Волковым, и делал это последним на долгой дороге структуризации текущих проектов, после структуризации состояний, многоязычных сообщений, сигналов с датчиков, ошибок и прочей ерунды. Основная причина - самодокументируемость, файл описания должен быть понятен заказчику , ну а порты - чтобы было в одном стиле.

В части использования макросов Волкова, я больше склоняюсь к мнению zltigo, поскольку до недавнего времени прямое ногодрыганье было описано функциональными макросами.
Вот только поддержка режимов работы в бэкграунде все-таки следующий уровень модели OSI smile.gif, и правильно не опускаться до портов сквозь уровень функциональных макросов, даже если это кажется проще.
Ладно, дискуссия немного остра получается, и подобная тема возникает раз в пол-года, вот попробую укрепиться в своем мнении и порву всех smile.gif


Цитата(zltigo @ Sep 18 2009, 10:27) *
это чистое, как слеза, ногодрыгание и переноситься на три варианта конструкции-разводки.

Как это выглядит? Я понимаю, условная компиляция, но на каком этапе.
Дело в том, что меня клинит, если по тексту разбросаны ifdef/endif. Все, что не помещается на экран, не помещается в мозг sad.gif


Цитата(zltigo @ Sep 18 2009, 10:27) *
Вышеприведенное, на мой взгляд описание одной простейшей операции с LCD.

У нас lcd разные, и тут все выглядит не очень противно smile.gif

Код
void WriteByte1(uchar ch)
{ uchar i;
  OffPin(LcdCsb);
  for (i = 0; i<8; i++)
  { if (ch & 0x80) OnPin(LcdSi); else OffPin(LcdSi);
    OffPin(LcdClk);
    OnPin(LcdClk);
    ch <<= 1;
  }
  OnPin(LcdCsb);
}
void WriteLcdControl(char D)
{ OffPin(LcdRs);
  WriteByte1(D);
}

void WriteLcdData(char D)
{ OnPin(LcdRs);
  WriteByte1(D);
}


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 18 2009, 09:55
Сообщение #42


Гуру
******

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



Цитата(Dog Pawlowa @ Sep 18 2009, 11:41) *
Как это выглядит? Я понимаю, условная компиляция, но на каком этапе.
Дело в том, что меня клинит, если по тексту разбросаны ifdef/endif. Все, что не помещается на экран, не помещается в мозг sad.gif

Макросы, только без притензий на "универсальность", а по месту, и таблицы в ROM.
Пример заполнения одной из таблиц
Код
#define MELODY( a, b, c, d ) (((d)<<9)|((c)<<6)|((b)<<3)|(a))
#define DUALTON( a, b ) (((b)<<14)|((a)<<12))

const ushort gtact[GEN_TAKTS] =
{
    MELODY(1,1,1,4) | DUALTON(TOFF,DUAL),
    MELODY(2,0,2,5) | DUALTON(DUAL,DUAL),
    MELODY(3,2,3,6) | DUALTON(TOFF,SINGLE),
....
....
....


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


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

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



Цитата(zltigo @ Sep 18 2009, 15:15) *
Когда некий инструмент подходит исключительно для очень конкретного И ПРОСТЕЙШЕГО случая, а рядом с этим случаем, в этом-же проекте 99 других случаев идущих в разрез с этим "инструментом" sad.gif
Вовсе не вразрез. Ортогонально. Не подходит - не пользуешь, подходит - почему нет?
Цитата
Причем инструменты оставшиеся задачи спокойно решают и "конкретную" задачу, то поминаемый Вам "хороший" инструмент становится именно той лишней сущностью sad.gif .
Я собственно уже всё обосновал. Вы упорно не желаете слушать, и приводите однообразные примеры.
Цитата
А его использование, как Вы там сказали -
"напоминает узколобый догматизм, уж извините."

Неизящно. Как "сам дурак" в детском садикеsmile.gif Использование инструмента по месту - никак не догматизм. А вот упорное отрицание возможной полезности инструмента - да.
Цитата
SPI? Их есть у нас. Вот, например:

Ужас. Вам что, платят по количеству строчек кода, как индусам? smile.gif
Код
int put_byte(uint08_t b)
{
    int i = 1000; // Total timeout
    int res = -1;

    do
    {   on(S0SSEL_SOFT);
        if((signal(MX_RDY))
        {
            S0SPDR = adrdat;
            if(!S0SPSR_check())
                res = S0SPDR;
            break;
        }
        off(S0SSEL_SOFT);
        delay_us( 10 );
        i--;
    }
    while( i > 0 );
    off(P0B_MASK_CSEL);
    off(S0SSEL_SOFT);
    off(P0B_MX_AC);
    return res;
}

int work_spi_modgal( bint modul, WORD adrdat )
{
    int i = 1000; // Total timeout
    int res;

    if( modul )
        on(M1_CSEL);
    else
        on(M0_CSEL);
    res = put_byte(adrdat>>8);
    if (res != -1)
        res = put_byte(adrdat);
    return res;
}

Цитата
Куда прикажете вставлять макрос для махания shipselect?


Вот, как-то так...


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 18 2009, 10:22
Сообщение #44


Гуру
******

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



Цитата(AHTOXA @ Sep 18 2009, 12:15) *
.... и приводите однообразные примеры.

smile.gif сказал, АНТОХА и в очередной раз написал on() smile.gif
Цитата
Ужас. Вам что, платят по количеству строчек кода, как индусам? smile.gif

Нет, за рабочий код в том числе работающий с железом так, как нужно железу а не мерещится специалистам по макросам описывающим ножку. Не Вам обижать индусов.
Цитата
Вот, как-то так...

Выше просто абсолютно нерабочая отсебятина из которой выброшен почти смысл, зато, например, простые вещи типа
Код
   IO0SET = (P0B_MASK_CSEL|S0SSEL_SOFT|P0B_MX_AC); // Disable SHDSL

заменены на три
Код
  off(P0B_MASK_CSEL);
    off(S0SSEL_SOFT);
    off(P0B_MX_AC);

И после этого "Вам что, платят по количеству строчек кода, как индусам?" sad.gif. Глупо.
О том, что даже эти три строчки совсем другая диаграмма и другие времена помолчим, и тот-же P0B_MASK это совсем не бит.. Но объяснять это счастливому обладателю "отвертки" желающему неприменно запихнуть ее куда попало видимо, пока? невозможно sad.gif. Может со временем и сами переболеете, как переболел желанием абстрагировать всякую мелочь я.


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


Гуру
******

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



Цитата(zltigo @ Sep 18 2009, 13:22) *
простые вещи типа
Код
   IO0SET = (P0B_MASK_CSEL|S0SSEL_SOFT|P0B_MX_AC); // Disable SHDSL

заменены на три...
о том, что это совсем другая диаграмма

Справедливости ради ... механизм макросов позволяет назвать сразу группу бит и применить одну команду.


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


developer
****

Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032



Макросы вещь небезопасная с точки зрения контроля типов, как минимум.
В С++ введены шаблоны.
Почему же никто про них не вспомнил ?


--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 18 2009, 10:49
Сообщение #47


Гуру
******

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



Цитата(Dog Pawlowa @ Sep 18 2009, 12:39) *
Справедливости ради ... механизм макросов позволяет назвать сразу группу бит и применить одну команду.

Возможно, что какие-то позволяют, какие-то не позволяют.... Для этого, вместо абсолютно самодостаточного однострочного выражения предлагаете вычитывать макрос on() и думать о последствиях его применения?


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Sep 18 2009, 11:26
Сообщение #48


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

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



Цитата(dimka76 @ Sep 18 2009, 16:48) *
В С++ введены шаблоны.
Почему же никто про них не вспомнил ?


Вообще-то, вспомнили smile.gif

Цитата(zltigo @ Sep 18 2009, 16:22) *
smile.gif сказал, АНТОХА и в очередной раз написал on() smile.gif

Дык, потому что zltigo написал:
Цитата(zltigo @ Sep 18 2009, 15:15) *
SPI? Их есть у нас. Вот, например:
Куда прикажете вставлять макрос для махания shipselect?

Вот я и вставилsmile.gif
Цитата(zltigo @ Sep 18 2009, 16:22) *
Нет, за рабочий код в том числе работающий с железом так, как нужно железу а не мерещится специалистам по макросам описывающим ножку.

Что рабочий - верю. Но ужасный...
Цитата
Выше просто абсолютно нерабочая отсебятина из которой выброшен почти смысл, зато, например, простые вещи типа
Код
   IO0SET = (P0B_MASK_CSEL|S0SSEL_SOFT|P0B_MX_AC); // Disable SHDSL

заменены на три
Код
  off(P0B_MASK_CSEL);
     off(S0SSEL_SOFT);
     off(P0B_MX_AC);

И в чём же её нерабочесть? Конкретно пожалуйста. За исключением P0B_MASK - я не догадался, что это два бита. Замените
off(P0B_MASK_CSEL);
на
off(M1_CSEL);
off(M0_CSEL);
. Что там ещё нерабочее?
Цитата
И после этого "Вам что, платят по количеству строчек кода, как индусам?" sad.gif . Глупо.

Ну тут просто надо было показать концепцию. В реальной системе, если это критично, я, конечно взвожу и чищу биты одновременно.
Цитата
О том, что даже эти три строчки совсем другая диаграмма и другие времена помолчим, и тот-же P0B_MASK это совсем не бит.. Но объяснять это счастливому обладателю "отвертки" желающему неприменно запихнуть ее куда попало видимо, пока? невозможно sad.gif . Может со временем и сами переболеете, как переболел этим я.

Я ими не болеюsmile.gif Я их примененяю по месту. Уже лет десять как. Не думаете же вы, что я всё пишу на on() и off()? smile.gif


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Sep 18 2009, 11:37
Сообщение #49


Гуру
******

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



Цитата(zltigo @ Sep 18 2009, 13:49) *
Возможно, что какие-то позволяют, какие-то не позволяют.... Для этого, вместо абсолютно самодостаточного однострочного выражения предлагаете вычитывать макрос on() и думать о последствиях его применения?

Ну, над тремя-четырьмя битами в одной строчке все равно думать надо. А группу бит можно назвать по человечески один раз и больше не думать.
Я не то, что предлагаю... рассматриваю реально существующие альтернативы.

О последствиях применения макросов уже поздно думать, мой "структурированный" проект на днях ушел заказчику, сегодня досылал файлы с подобными определениями. Иначе пришлось бы отдельные документы вместо такого исходного кода:
Код
//          number                   name          name2       condition          
SENSOR( CanEmpty           ,    "Can empty"         , "AC,A2" , GetAdc(CanAdc) > se.CanEmptyLevel               )
SENSOR( NivBelowEmpty    ,    "Niv below empty" , "AC,A3" , GetAdc(NivEmptyAdc)>se.NiveauLevel              )
SENSOR( LowPower            ,    "Low power    "     , "DC,A6" , GetAdc(PowerAdc)  <  se.LowPowerLevel          )


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


Гуру
******

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



Цитата(Dog Pawlowa @ Sep 18 2009, 13:37) *
Ну, над тремя-четырьмя битами в одной строчке все равно думать надо. А группу бит можно назвать по человечески один раз и больше не думать.

Так у меня в той строчке есть и группа бит, и обозвана прилично, только что это меняет?
Код
.....

Слишком много букофф - для создания видимости простоты понимания заказчиком, который хочет иметь иллюзии того, что способен сколь-нибудь серьезно разобраться или просто иметь кучу документов по причине того, что "так принято" - вариант совершенно изумительный (ну разве только буквы почему-то не русские smile.gif ). Но для работы sad.gif.
Лично я предпочитаю даже в таких случаях писать пояснительные записки - заодно и для себя польза - пишется и немного подчищается. В противном проект стремиться к горе хлама, хоть и "самодокументированной".
Цитата(AHTOXA @ Sep 18 2009, 13:26) *
И в чём же её нерабочесть? Конкретно пожалуйста. За исключением P0B_MASK - я не догадался, что это два бита.

Совсем другой алгоритм. Всякие махания пинами должны быть разные для разных транзакций по SPI, таймаут хитрее, процедура проверки готовности сложнее, лишние чтения SPDR (и уж тем более анализ ненужно считанного) не нужны, причем чтения должны быть ПОСЛЕ определенных ногомаханий а не просто быть, где попало. Для Вас по барабану время исполнения. Вы написали ПОЛНУЮ ЕРУНДУ не соответствующую исходному алгоритму (да от такой не потому, что я его сдуру написал, а по той причине, что на встречной стороне AVR с софтовым, блин, SPI от стороннего производителя ) и если действительно этого не видите и "Уже лет десять как", то дела плохи sad.gif. Я думал студент какой sad.gif


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


Гуру
******

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



Цитата(zltigo @ Sep 18 2009, 15:11) *
В противном проект стремится к горе хлама

Да сам боюсь sad.gif Посмотрим ...


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


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

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



Цитата(zltigo @ Sep 18 2009, 18:11) *
Совсем другой алгоритм. Всякие махания пинами должны быть разные для разных транзакций по SPI,

Ну есть немножко. В вашем коде сам чёрт ногу сломит, вот и проглядел, что там ещё байт адреса ножкой выбирается и результат в первый раз не считываетсяsmile.gif
Остальное мелочи, работать будет. Ещё раз повторюсь - я лишь иллюстрировал концепцию.
Цитата
Я думал студент какой sad.gif

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


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
dxp
сообщение Sep 19 2009, 08:35
Сообщение #53


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(MrYuran @ Sep 18 2009, 11:54) *
Для наглядности, я тоже так всегда делаю.

"Это короче, чем я могу написать, а компилятор должен понимать умолчания" (с) Б.Страуструп.

Цитата(zltigo @ Sep 18 2009, 14:27) *
Банальная наглядность - уточнение с долей привычки. Абсолютно безобидная привычка.

Обидного в такой привычки и правда нет. smile.gif

А когда заводите просто глобальные/статические переменные:

int a;
int b;

int main()
{
...
return 0;
}

тоже инициализируете:

int a = 0;
int b = 0;

?

Или нет?

smile.gif


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 19 2009, 08:56
Сообщение #54


Гуру
******

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



Цитата(dxp @ Sep 19 2009, 10:35) *
Или нет?

Разумеется нет, ибо такую привычку совсем безобидной уже назвать не могу, ибо в общем случае не знаю, как компилятор будет их инициализировать. Может туповато будет инициализировать из ROM.
Хотя в отдельных случаях - бывает пишу инициализацию, например, тем-же самым нулевым enum - ну что-то типа комментария о начальном состоянии.
А с enum никаких побочных эффектов быть не может. И тут накладывается еще одна привычка - начинающиеся с нуля я стараюсь не использовать, там, где это возможно.
Да и если с '0', то часто пишу такие с 'дырками'. Тоже, считайте, привычка иногда помогающая быстрее в каом-нибудь дампе разобраться.
Код
    
typedef enum {
    S_MODE_LOGO = 0x00,
    S_MODE_MAIN,
    S_MODE_BOOK,
    S_MODE_LIST,
    S_MODE_DIAL,
    S_MODE_MENU,

    S_STATE_IDLE = 0x10,
    S_STATE_OFFHOOK,
    S_STATE_SPEAKER,

    S_SHOW_RINGING = 0x20,
    S_SHOW_NO_RINGING,

    S_RING_ENABLE = 0x50,
.......

И явный ноль при этом смотрится в одном стиле.
Посему мною уже на автомате пишутся enum начинающиеся с инициализации.
Цитата(dxp @ Sep 19 2009, 10:35) *
(с) Б.Страуструп.

Не знаю, как там исходники Страуструпа smile.gif smile.gif smile.gif а мои исходники не только компиляторы, но и люди читаютsmile.gif

P.S.
А в чем проблема-то?


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
dxp
сообщение Sep 19 2009, 12:35
Сообщение #55


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(zltigo @ Sep 19 2009, 15:56) *
P.S.
А в чем проблема-то?

Да, нету проблемы. smile.gif Просто явно лишняя писанина, вот и поинтересовался, в чем может быть смысл. Оказалось, в личных эстетических предпочтениях. Вопросов больше не имею.

Цитата(zltigo @ Sep 19 2009, 15:56) *
Не знаю, как там исходники Страуструпа smile.gif smile.gif smile.gif а мои исходники не только компиляторы, но и люди читаютsmile.gif

P.S. Люди тоже должны знать правила языка и понимать умолчания. smile.gif


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st August 2025 - 01:08
Рейтинг@Mail.ru


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