|
|
 |
Ответов
|
Jan 15 2013, 20:14
|
Участник

Группа: Участник
Сообщений: 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 писать зачастую короче чем помнить точное название члена.
|
|
|
|
|
Jan 15 2013, 20:24
|
Участник

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

|
Цитата(_Артём_ @ Jan 16 2013, 00:20)  На что только не пойдёт человек, лишь бы новое не осваивать. IDE у вас какая-то устаревшая.
А IO-регистры подсказывает? Второйдовод писать всегда, этоодним взглядом на код понятно что это член класса а не какаянибудь переменная локальная. IDE у меня Eclipse под линуксом. Последнее время работают только с STM32 и использую стандартную библиотеку, до регистров решил не опускатся. Сейчас больше интересует "бизнес-логика" алгоритмов.
|
|
|
|
|
Jan 15 2013, 20:52
|
Гуру
     
Группа: Свой
Сообщений: 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)  Сейчас больше интересует "бизнес-логика" алгоритмов. Логика у вас... в смысле логика тоже дело...
|
|
|
|
Сообщений в этой теме
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
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|