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

 
 
> Возможность использования OS::channel в прерываниях
abutorin
сообщение Jan 13 2013, 19:25
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 40
Регистрация: 3-09-12
Пользователь №: 73 374



Добрый вечер.
Пробую сделать передачу по USART с использование буфера. Для межпроцессорного удобства очень нравится использовать OS::channel. Возможно ли его использовать и в прерываниях? Точнее интересует процедура получения элемента из канала?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
abutorin
сообщение Jan 15 2013, 20:14
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 40
Регистрация: 3-09-12
Пользователь №: 73 374



Проблему решил использовав События:
Код
class usart
{
public:
    usr::ring_buffer<uint8_t, 10, uint8_t> TxPool;

    OS::TEventFlag TxNotFull;

    USART_TypeDef * PORT;

INLINE void it_handler ()
    {

        if (USART_GetITStatus(this->PORT,USART_IT_TXE) != RESET)
        {
            {
                if(this->TxPool.get_count())
                {
                    USART_SendData(this->PORT,this->TxPool.pop());
                    this->TxNotFull.signal_isr();
                }
                else
                {
                    USART_ITConfig(this->PORT, USART_IT_TXE, DISABLE);
                }
            }
            USART_ClearITPendingBit(this->PORT,USART_IT_TXE);
        }

    }

    INLINE bool full ()
    {
        TCritSect cs;

        return !this->TxPool.get_free_size();

    }

    void send(const uint8_t & data)
    {

        this->TxNotFull.clear();

        while (this->full())
        {
            this->TxNotFull.wait();
        }

        this->TxPool.push(data);

        USART_ITConfig(USART1, USART_IT_TXE, ENABLE);

    }

Решение черновое в плане оформления класа, но концептуально думаю досточно простое и надежное. Оно правда подразумевает что заполнять буфер будет только один поток, т.к. из средств синхронизации используется только критическая секция на проверку заполненности.

Цитата(_Артём_ @ Jan 16 2013, 00:10) *
Объектный - это хорошо, только this-> зачем всегда писать? попробуйте без него. Писанины меньше.

если писать this то IDE подставляет выбор членов класса ). Так что this писать зачастую короче чем помнить точное название члена.
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Jan 15 2013, 20:20
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(abutorin @ Jan 15 2013, 22:14) *
если писать this то IDE подставляет выбор членов класса ). Так что this писать зачастую короче чем помнить точное название члена.

На что только не пойдёт человек, лишь бы новое не осваивать.
IDE у вас какая-то устаревшая.

А IO-регистры подсказывает?
Go to the top of the page
 
+Quote Post
abutorin
сообщение Jan 15 2013, 20:24
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 40
Регистрация: 3-09-12
Пользователь №: 73 374



Цитата(_Артём_ @ Jan 16 2013, 00:20) *
На что только не пойдёт человек, лишь бы новое не осваивать.
IDE у вас какая-то устаревшая.

А IO-регистры подсказывает?


Второйдовод писать всегда, этоодним взглядом на код понятно что это член класса а не какаянибудь переменная локальная. IDE у меня Eclipse под линуксом. Последнее время работают только с STM32 и использую стандартную библиотеку, до регистров решил не опускатся. Сейчас больше интересует "бизнес-логика" алгоритмов.
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Jan 15 2013, 20:52
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(abutorin @ Jan 15 2013, 22:24) *
Второйдовод писать всегда, этоодним взглядом на код понятно что это член класса а не какаянибудь переменная локальная.

Если писать всега this, то сомнений не возникнет...

Цитата(abutorin @ Jan 15 2013, 22:24) *
а не какаянибудь переменная локальная.

обычно так делаю
Код
if (local_variable != GlobalVariable)

, то есть через правила именования, но они у каждого свои, да.

Цитата(abutorin @ Jan 15 2013, 22:24) *
IDE у меня Eclipse под линуксом.

Ошибся, IDE - не устаревшая.

Цитата(abutorin @ Jan 15 2013, 22:24) *
Последнее время работают только с STM32 и использую стандартную библиотеку, до регистров решил не опускатся. Сейчас больше интересует "бизнес-логика" алгоритмов.


"решил не опускатся" или решил не подниматься?

Цитата(abutorin @ Jan 15 2013, 22:24) *
Сейчас больше интересует "бизнес-логика" алгоритмов.

Логика у вас... в смысле логика тоже дело...
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- abutorin   Возможность использования OS::channel в прерываниях   Jan 13 2013, 19:25
- - AHTOXA   Использовать канал в прерывании можно. Учтите толь...   Jan 13 2013, 20:45
|- - abutorin   Спасибо, проверку заполнености, проверку пустоты я...   Jan 14 2013, 02:40
|- - abutorin   Цитата(AHTOXA @ Jan 14 2013, 00:45) Испол...   Jan 15 2013, 19:16
|- - _Артём_   Не знаю почему зависает, наверное что-то неправиль...   Jan 15 2013, 19:26
|- - abutorin   Цитата(_Артём_ @ Jan 15 2013, 23:26) Не з...   Jan 15 2013, 19:31
|- - _Артём_   Цитата(abutorin @ Jan 15 2013, 21:31) Объ...   Jan 15 2013, 20:10
|- - Сергей Борщ   QUOTE (abutorin @ Jan 15 2013, 21:31) Суд...   Jan 15 2013, 22:46
|- - abutorin   Цитата(Сергей Борщ @ Jan 16 2013, 02:46) ...   Jan 16 2013, 03:29
|- - _Артём_   Цитата(abutorin @ Jan 16 2013, 05:29) А в...   Jan 16 2013, 04:45
||- - AHTOXA   TXE очищается записью в DR. Вручную его чистить не...   Jan 16 2013, 05:05
|- - Сергей Борщ   QUOTE (abutorin @ Jan 16 2013, 05:29) USA...   Jan 16 2013, 08:54
|- - AHTOXA   Цитата(Сергей Борщ @ Jan 16 2013, 14:54) ...   Jan 16 2013, 10:18
||- - Сергей Борщ   QUOTE (AHTOXA @ Jan 16 2013, 12:18) А это...   Jan 16 2013, 11:27
||- - AHTOXA   Цитата(Сергей Борщ @ Jan 16 2013, 17:27) ...   Jan 16 2013, 13:52
|- - abutorin   Цитата(Сергей Борщ @ Jan 16 2013, 12:54) ...   Jan 16 2013, 11:33
|- - Сергей Борщ   QUOTE (abutorin @ Jan 16 2013, 13:33) Есл...   Jan 17 2013, 10:15
|- - abutorin   Цитата(Сергей Борщ @ Jan 17 2013, 14:15) ...   Jan 17 2013, 12:25
|- - Сергей Борщ   QUOTE (abutorin @ Jan 17 2013, 14:25) Пло...   Jan 17 2013, 13:12
|- - abutorin   Цитата(Сергей Борщ @ Jan 17 2013, 17:12) ...   Jan 17 2013, 13:20
|- - AHTOXA   Насчёт работы с UART по DMA вот вам три темы: раз...   Jan 17 2013, 18:31
|- - abutorin   Цитата(AHTOXA @ Jan 17 2013, 22:31) Насчё...   Jan 18 2013, 05:37
|- - Сергей Борщ   QUOTE (abutorin @ Jan 18 2013, 07:37) Спа...   Jan 18 2013, 07:41
|- - abutorin   Цитата(Сергей Борщ @ Jan 18 2013, 11:41) ...   Jan 18 2013, 09:14
- - Vasya777   Мне кажется для обмена по интерфейсам связи лучше ...   Jan 15 2013, 15:07
- - abutorin   Как обещал ранее выкладываю код который у меня раб...   Jan 18 2013, 18:52
|- - AHTOXA   USART_ClearITPendingBit(this->PORT,USART_IT_TXE...   Jan 19 2013, 04:43
|- - abutorin   Цитата(AHTOXA @ Jan 19 2013, 08:43) USART...   Jan 19 2013, 17:19
|- - AHTOXA   Цитата(abutorin @ Jan 19 2013, 23:19) В к...   Jan 19 2013, 17:42
|- - abutorin   Цитата(AHTOXA @ Jan 19 2013, 21:42) Код ...   Jan 19 2013, 17:56
||- - _Артём_   Цитата(abutorin @ Jan 19 2013, 19:56) В с...   Jan 19 2013, 18:13
|- - abutorin   Цитата(AHTOXA @ Jan 19 2013, 21:42) Код ...   Jan 19 2013, 18:42
|- - AHTOXA   Цитата(abutorin @ Jan 20 2013, 00:42) С т...   Jan 19 2013, 19:12
|- - abutorin   Цитата(AHTOXA @ Jan 19 2013, 23:12) У мен...   Jan 19 2013, 19:19
|- - AHTOXA   Насчёт компактности - думаю, что случайно так вышл...   Jan 19 2013, 19:36
|- - abutorin   Цитата(AHTOXA @ Jan 19 2013, 23:36) А по ...   Jan 19 2013, 20:01
|- - AHTOXA   Цитата(abutorin @ Jan 20 2013, 02:01) Есл...   Jan 19 2013, 20:21
|- - abutorin   Цитата(AHTOXA @ Jan 20 2013, 00:21) А уве...   Jan 19 2013, 20:42
|- - AHTOXA   Ну, с тех пор что-то же поменялось. Так что это бы...   Jan 20 2013, 05:31
|- - abutorin   Цитата(AHTOXA @ Jan 20 2013, 09:31) В общ...   Jan 20 2013, 05:57
- - сарматъ   я так и не понял, а функции типа push_isr() не нуж...   Sep 4 2013, 20:26
|- - _Артём_   Цитата(сарматъ @ Sep 4 2013, 23:26) я так...   Sep 4 2013, 21:41
|- - сарматъ   там могло бы быть что либо такого плана CODEtempl...   Sep 5 2013, 05:39
|- - Сергей Борщ   QUOTE (сарматъ @ Sep 5 2013, 07:39) там м...   Sep 5 2013, 06:10
- - сарматъ   да я уже подумал над этим правда придется не насле...   Sep 5 2013, 06:24
|- - dxp   QUOTE (сарматъ @ Sep 5 2013, 13:24) да я ...   Sep 5 2013, 07:21
|- - сарматъ   потому что нужен вот такой вот пул и если я его до...   Sep 5 2013, 07:37
|- - Сергей Борщ   QUOTE (сарматъ @ Sep 5 2013, 09:37) потом...   Sep 5 2013, 08:25
- - сарматъ   да, класс канала отличный класс, плюс ко всем его ...   Sep 5 2013, 08:33
|- - Сергей Борщ   QUOTE (сарматъ @ Sep 5 2013, 10:33) сдела...   Sep 6 2013, 08:29
- - сарматъ   ок, так и сделаю и потом выложу сюда что получилос...   Sep 6 2013, 08:44


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

 


RSS Текстовая версия Сейчас: 22nd June 2025 - 01:39
Рейтинг@Mail.ru


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