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

 
 
> возможно ли на Си, объединить биты регистров портов микроконтроллера
another_one
сообщение Jun 13 2009, 16:50
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 252
Регистрация: 2-03-08
Пользователь №: 35 557



Здравствуйте.

Прошу подсказки.

С целью удобства и лучшей читабельности необходимо объединить биты портов микроконтроллера в один структурный тип или объединение.

Биты находятся в разных портах и не последовательно.

Не пойму как назначить адрес бита порта к "битовому типу" структуры.

Заранее благодарен


--------------------
One Chip is All You Need
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
defunct
сообщение Jun 14 2009, 20:52
Сообщение #2


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Меня как-то никогда не смущало написать пару десятков inline функций с осмысленными названиями, чтобы абстрагироваться от портов полностью.

Код
static inline void hal_SetRTS0(void)
{
    PORTG |= (1 << RTS0);
}

static inline void hal_ClrRTS0(void)
{
    PORTG &= ~(1 << RTS0);
}

static inline void hal_SetDTR0(void)
{
    PORTG |= (1 << DTR0);
}

static inline void hal_ClrDTR0(void)
{
    PORTG &= ~(1 << DTR0);
}


static inline void hal_PutRTS0(U8 val)
{
    if (val)
        hal_SetRTS();
    else
        hal_ClrRTS();
}

static inline void hal_PutDTR0(U8 val)
{
    if (val)
        hal_SetDTR();
    else
        hal_ClrDTR();
}


static inline U8 hal_GetCTS0(void)
{
    return (PINE & (1 << CTS0)) != 0;
}

static inline U8 hal_GetDCD0(void)
{
    return (PINB & (1 << DCD0)) != 0;
}

static inline U8 hal_GetDSR0(void)
{
    return (PINB & (1 << DSR0)) != 0;
}

static inline U8 hal_GetRI0(void)
{
    return (PINB & (1 << RI0)) != 0;
}
....


А уже потом где надо, эти функции с осмысленными названиями назначать структурам:

Код
typedef struct tagFLOW_CONTROL
{
    U8 enabled;   // flow control enabled (check CTS before transmitting)

    // acquiring signals cbs
    void (*On_DCD_Up)(struct tagFLOW_CONTROL *pCtrl);
    void (*On_CTS_Up)(struct tagFLOW_CONTROL *pCtrl);
    void (*On_DSR_Up)(struct tagFLOW_CONTROL *pCtrl);
    void (*On_RI_Up)(struct tagFLOW_CONTROL *pCtrl);

    // losing signals cbs
    void (*On_DCD_Down)(struct tagFLOW_CONTROL *pCtrl);
    void (*On_CTS_Down)(struct tagFLOW_CONTROL *pCtrl);
    void (*On_DSR_Down)(struct tagFLOW_CONTROL *pCtrl);
    void (*On_RI_Down)(struct tagFLOW_CONTROL *pCtrl);
    
    void (*set_rts_cb)(U8 val);
    void (*set_dtr_cb)(U8 val);
    
    U8   (*get_cts_cb)(void);
    U8   (*get_dsr_cb)(void);
    U8   (*get_dcd_cb)(void);
    U8   (*get_ri_cb)(void);
} TFLOW_CONTROL, *PFLOW_CONTROL;

...

#if (UART1_FULL_RS232)
    uart_con.u1_rs232_control.set_dtr_cb = hal_PutDTR0;
    uart_con.u1_rs232_control.set_rts_cb = hal_PutRTS0;
    uart_con.u1_rs232_control.get_cts_cb = hal_GetCTS0;
    uart_con.u1_rs232_control.get_dsr_cb = hal_GetDSR0;
    uart_con.u1_rs232_control.get_dcd_cb = hal_GetDCD0;
    uart_con.u1_rs232_control.get_ri_cb  = hal_GetRI0;

    uart_con.u1.pCtrl = &uart_con.u1_rs232_control;
    Kernel_SetTask( u1_DispatchRemoteFlowCtrlEvents, 5, TASK_PERIODIC);
#endif


Зачем нужны всякие макросы и прочая фигня для работы с портами то?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jun 14 2009, 21:03
Сообщение #3


Гуру
******

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



Цитата(defunct @ Jun 14 2009, 23:52) *
Зачем нужны всякие макросы и прочая фигня для работы с портами то?

Зачем нужна вся эта фигня для работы с портами то?


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
defunct
сообщение Jun 14 2009, 21:07
Сообщение #4


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(zltigo @ Jun 15 2009, 00:03) *
Зачем нужна вся эта фигня для работы с портами то?

Как правило __работать__ с портами не нужно.
Нужно работать с какими-то внешними объектами, так уж получается что через порты. Порты - промежуточное звено, о котором лучше всего забыть вообще.
Упоминания о портах у меня заканчиваются в hal и нигде более в программе не вспоминаются.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jun 14 2009, 21:16
Сообщение #5


Гуру
******

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



Цитата(defunct @ Jun 15 2009, 00:07) *
Нужно работать с какими-то внешними объектами, так уж получается что через порты. Порты - промежуточное звено, о котором лучше всего забыть вообще.

А вместо декларируемого HAL для "объекта" получена просто заумная работа с отдельными битам sad.gif. Вы не одиноки sad.gif, а заумные HAL пишут с неменьшим "успехом" и на макросах. Уму не растяжимой "красоты" пример HAL можно глянуть в SimpliciTI от TI. Ну их еще можно понять - а нефиг читать и портировать - берите и пользуйте только с нашими продуктами, как есть.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- another_one   возможно ли на Си   Jun 13 2009, 16:50
- - sergeeff   Никак   Jun 13 2009, 17:59
- - DpInRock   Вы всегда смотрите, как именно ваши фантазии будет...   Jun 13 2009, 19:38
|- - another_one   Цитата(DpInRock @ Jun 13 2009, 23:38) Вы ...   Jun 13 2009, 22:17
- - SSerge   Для читаемости можно оформить доступ к битам в раз...   Jun 13 2009, 22:49
- - sergeeff   Почитайте современные книги, которые всячески сове...   Jun 14 2009, 00:20
|- - zltigo   Цитата(sergeeff @ Jun 14 2009, 03:20) Поч...   Jun 14 2009, 05:17
|- - Herz   Цитата(sergeeff @ Jun 14 2009, 02:20) Поч...   Jun 14 2009, 06:47
|- - SSerge   Цитата(Herz @ Jun 14 2009, 12:47) Такие к...   Jun 14 2009, 10:21
|- - Dog Pawlowa   Цитата(SSerge @ Jun 14 2009, 13:21) Но, р...   Jun 14 2009, 10:49
|- - sergeeff   Цитата(Dog Pawlowa @ Jun 14 2009, 14:49) ...   Jun 14 2009, 10:55
||- - Dog Pawlowa   Цитата(sergeeff @ Jun 14 2009, 13:55) Это...   Jun 14 2009, 11:07
|- - aaarrr   Цитата(Dog Pawlowa @ Jun 14 2009, 14:49) ...   Jun 14 2009, 11:35
||- - Dog Pawlowa   Цитата(aaarrr @ Jun 14 2009, 14:35) очень...   Jun 14 2009, 17:09
||- - aaarrr   Цитата(Dog Pawlowa @ Jun 14 2009, 21:09) ...   Jun 14 2009, 17:16
|||- - Dog Pawlowa   Цитата(aaarrr @ Jun 14 2009, 20:16) зато ...   Jun 14 2009, 17:36
|||- - aaarrr   Цитата(Dog Pawlowa @ Jun 14 2009, 21:30) ...   Jun 14 2009, 17:41
||||- - Dog Pawlowa   Цитата(aaarrr @ Jun 14 2009, 20:41) Вы им...   Jun 14 2009, 17:55
||||- - aaarrr   Цитата(Dog Pawlowa @ Jun 14 2009, 21:55) ...   Jun 14 2009, 17:59
|||- - sergeeff   Цитата(Dog Pawlowa @ Jun 14 2009, 20:36) ...   Jun 14 2009, 17:48
||||- - Dog Pawlowa   Цитата(sergeeff @ Jun 14 2009, 20:48) Ну ...   Jun 14 2009, 18:04
||||- - sergeeff   Цитата(Dog Pawlowa @ Jun 14 2009, 21:04) ...   Jun 14 2009, 18:41
||||- - ReAl   Цитата(sergeeff @ Jun 14 2009, 21:41) 2. ...   Jun 14 2009, 20:46
||||- - sergeeff   Цитата(ReAl @ Jun 14 2009, 23:46) где ...   Jun 15 2009, 06:31
||||- - Dog Pawlowa   Цитата(sergeeff @ Jun 15 2009, 09:31) кни...   Jun 15 2009, 06:44
|||||- - sergeeff   Цитата(Dog Pawlowa @ Jun 15 2009, 09:44) ...   Jun 15 2009, 07:11
||||- - ReAl   Цитата(sergeeff @ Jun 15 2009, 09:31) 2. ...   Jun 15 2009, 08:03
||||- - sergeeff   Цитата(ReAl @ Jun 15 2009, 11:03) Так зна...   Jun 15 2009, 08:33
|||- - zltigo   Цитата(Dog Pawlowa @ Jun 14 2009, 20:36) ...   Jun 14 2009, 19:13
||- - sergeeff   Цитата(Dog Pawlowa @ Jun 14 2009, 20:09) ...   Jun 14 2009, 17:29
|- - SasaVitebsk   Цитата(Dog Pawlowa @ Jun 14 2009, 13:49) ...   Jun 15 2009, 08:24
|- - zltigo   Цитата(SasaVitebsk @ Jun 15 2009, 11:24) ...   Jun 15 2009, 10:43
|- - SasaVitebsk   Цитата(zltigo @ Jun 15 2009, 13:43) ...и ...   Jun 17 2009, 08:57
- - sergeeff   Мне представляется, что: 1. Есть программисты - од...   Jun 14 2009, 10:27
- - KRS   На С++ можно с помощью перезагрузки операции присв...   Jun 14 2009, 10:59
- - sergeeff   А почему все макросы в одном h-файле можно помести...   Jun 14 2009, 11:16
- - MrYuran   Я бы сделал так: #define UP(port, bit) port |=...   Jun 14 2009, 11:34
|- - another_one   Цитата(MrYuran @ Jun 14 2009, 15:34) Я бы...   Jun 14 2009, 18:41
|- - sergeeff   Цитата(another_one @ Jun 14 2009, 21:41) ...   Jun 14 2009, 18:59
|- - aaarrr   Цитата(sergeeff @ Jun 14 2009, 22:59) Еже...   Jun 14 2009, 19:05
|- - zltigo   Цитата(sergeeff @ Jun 14 2009, 21:59) Неб...   Jun 14 2009, 19:16
|- - sergeeff   Цитата(zltigo @ Jun 14 2009, 22:16) Прост...   Jun 14 2009, 19:38
|- - Dog Pawlowa   Цитата(sergeeff @ Jun 14 2009, 22:38) ......   Jun 14 2009, 19:54
||- - aaarrr   Цитата(Dog Pawlowa @ Jun 14 2009, 23:54) ...   Jun 14 2009, 20:05
|- - zltigo   Цитата(sergeeff @ Jun 14 2009, 22:38) Сог...   Jun 14 2009, 20:11
- - aaarrr   Да-да, copy-paste, в первый раз и "char...   Jun 14 2009, 19:14
|- - defunct   Цитата(zltigo @ Jun 15 2009, 00:16) А вме...   Jun 14 2009, 21:28
|- - singlskv   Цитата(defunct @ Jun 15 2009, 01:28) на м...   Jun 14 2009, 21:39
||- - defunct   Цитата(singlskv @ Jun 15 2009, 00:39) а п...   Jun 14 2009, 21:46
||- - singlskv   Цитата(defunct @ Jun 15 2009, 01:46) Пото...   Jun 14 2009, 21:54
||- - defunct   Цитата(singlskv @ Jun 15 2009, 00:54) про...   Jun 14 2009, 22:13
||- - singlskv   Цитата(defunct @ Jun 15 2009, 02:03) Вы ч...   Jun 14 2009, 22:14
||- - Dog Pawlowa   Цитата(defunct @ Jun 15 2009, 01:13) Вы м...   Jun 15 2009, 05:37
||- - defunct   Цитата(Dog Pawlowa @ Jun 15 2009, 08:37) ...   Jun 15 2009, 06:46
|- - zltigo   Цитата(defunct @ Jun 15 2009, 00:28) если...   Jun 14 2009, 22:00
|- - defunct   Цитата(zltigo @ Jun 15 2009, 01:00) Зачас...   Jun 14 2009, 22:25
|- - singlskv   Цитата(defunct @ Jun 15 2009, 02:25) Блин...   Jun 14 2009, 22:30
||- - defunct   Цитата(singlskv @ Jun 15 2009, 01:30) Ну ...   Jun 14 2009, 22:37
|- - zltigo   Цитата(defunct @ Jun 15 2009, 01:25) А ес...   Jun 15 2009, 07:05
- - ReAl   ==================== Кстати, об исходной теме и пр...   Jun 14 2009, 20:58


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

 


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


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