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

 
 
> WINAVR: ламерский вопрос
_Pasha
сообщение Feb 11 2008, 11:59
Сообщение #1


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Господа, помогите тормозящему.
Надо получить библиотеку для RS-485 (это я так упражняюсь).
Все бы ничего, но есть ножка, переключающая прием/передачу, и расположение ее не определено.
Ясно, что #define здесь не годится.
Объявление
Код
extern uint8_t Flow_Port, Flow_Pin_Mask;

Тоже неприемлемо, потому что мы пытаемся получить инструкции sbi/cbi
Значит, надо объявить extern inline функцию.
Как правильно это сделать - не могу найти.
Помогите,пожалуйста.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Сергей Борщ
сообщение Feb 11 2008, 12:42
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(_Pasha @ Feb 11 2008, 13:59) *
Все бы ничего, но есть ножка, переключающая прием/передачу, и расположение ее не определено.
Очень полезные макросы. Чуть-чуть поправить #ifdef и будут работать с avr-gcc.

А вот тут они же, но уже под avr-gcc, спасибо сказать ReAlу


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Feb 11 2008, 13:10
Сообщение #3


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(Сергей Борщ @ Feb 11 2008, 15:42) *
Очень полезные макросы...

Спасибо, но я имел ввиду чуть другое.
Хотел отвязаться от порядка компиляции модулей, из-за чего не хочется пользоваться макросом.
Так, чтобы линкер подставил то ,что надо, а именно Flow_Port |=(1<<Flow_Pin); .

Например:
Код
extern void Flow_Rx(void); // как ее правильно inline описать  в главном модуле?
ISR (UART_TX_vect)
{
Flow_Rx(); /*чтобы здесь оказалось  Flow_Port &= ~(1<<Flow_Pin); без пролога/эпилога и вообще вызова подпрограммы*/
}


Может, это вообще невозможно?

А макросы великолепные.

Сообщение отредактировал _Pasha - Feb 11 2008, 13:14
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Feb 12 2008, 10:46
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(_Pasha @ Feb 11 2008, 15:10) *
Спасибо, но я имел ввиду чуть другое.
Хотел отвязаться от порядка компиляции модулей, из-за чего не хочется пользоваться макросом.
Так, чтобы линкер подставил то ,что надо, а именно Flow_Port |=(1<<Flow_Pin); .
Так вам не нужно это выносить в функцию. Вместо описания отдельных Flow_Port и Flow_Pin сделайте
Код
#define FLOW_PIN  D,4,H // PORTD.4 переключает направление

ISR (UART_TX_vect)
{
    off(FLOW_PIN); /*здесь как раз и окажется PORTD &= ~(1<<4); без пролога/эпилога и вообще вызова подпрограммы*/
    .........
    on(FLOW_PIN); /*а здесь PORTD |= (1<<4); без пролога/эпилога и вообще вызова подпрограммы*/
}
А чтобы сделать что-то "без пролога/эпилога и вообще вызова подпрограммы", функцию можно определить как static inline __attribute__((__always_inline__)).


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Feb 13 2008, 08:57
Сообщение #5


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(Сергей Борщ @ Feb 12 2008, 13:46) *
А чтобы сделать что-то "без пролога/эпилога и вообще вызова подпрограммы", функцию можно определить как static inline __attribute__((__always_inline__)).


Дык с этим аттрибутом Winavr все равно умудряется иногда сформировать подпрограмму. Когда подключал работу с eeprom, заметил это, хотя чтение вызывалось всего один раз. Поэтому не стал разбираться, а задал вопрос.

Повторюсь, что вопрос вызван ошибкой в проектировании и явился следствием долгого писания на асме. ИМХО, правильная портируемая библиотека должна на своем нижнем уровне, работающем с железом, как раз и иметь все варианты через #ifdef..#endif, следовательно, подлежать самой частой перекомпиляции. На примере с RS-485 на данном уровне достаточно экспортировать функции
настройки / работы с буферами, на котором сидят прерывания / единую кодировку ошибок.

И все это с выбором номера порта.

А протоколы - это уже другая песнь, но если не хватает ресурсов, проще, например, работу с 9-ти битной адресацией МК, мультимастеры и прочие дебри решать на данном "полужелезном" уровне. В данном случае "нисходящее проектирования" - отличный способ водить себя за нос, как сказал бы Эйнштейн. smile.gif
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- _Pasha   WINAVR: ламерский вопрос   Feb 11 2008, 11:59
|- - AHTOXA   Цитата(Сергей Борщ @ Feb 12 2008, 15:46) ...   Feb 12 2008, 16:48
||- - Сергей Борщ   Цитата(AHTOXA @ Feb 12 2008, 18:48) Так в...   Feb 12 2008, 17:14
||- - AHTOXA   Цитата(Сергей Борщ @ Feb 12 2008, 22:14) ...   Feb 12 2008, 17:38
||- - Сергей Борщ   Цитата(AHTOXA @ Feb 12 2008, 19:38) То ес...   Feb 12 2008, 18:03
||- - AHTOXA   Цитата(Сергей Борщ @ Feb 12 2008, 23:03) ...   Feb 12 2008, 18:53
||- - Сергей Борщ   Цитата(AHTOXA @ Feb 12 2008, 20:53) Так э...   Feb 12 2008, 20:48
||- - AHTOXA   Цитата(Сергей Борщ @ Feb 13 2008, 01:48) ...   Feb 12 2008, 21:11
|||- - Сергей Борщ   Цитата(AHTOXA @ Feb 12 2008, 23:11) Дык, ...   Feb 13 2008, 08:33
|||- - AHTOXA   Цитата(Сергей Борщ @ Feb 13 2008, 13:33) ...   Feb 13 2008, 08:55
||- - AHTOXA   Цитата(Сергей Борщ @ Feb 13 2008, 01:48) ...   Feb 13 2008, 10:49
||- - Сергей Борщ   Цитата(AHTOXA @ Feb 13 2008, 12:49) Вылет...   Feb 13 2008, 13:06
||- - AHTOXA   Цитата(Сергей Борщ @ Feb 13 2008, 18:06) ...   Feb 13 2008, 14:13
||- - gotty   Цитата(AHTOXA @ Feb 13 2008, 16:13) Ну и ...   Feb 13 2008, 14:31
||- - Сергей Борщ   Цитата(AHTOXA @ Feb 13 2008, 16:13) А где...   Feb 13 2008, 14:48
|- - Сергей Борщ   Цитата(_Pasha @ Feb 13 2008, 10:57) Дык с...   Feb 13 2008, 10:25
- - _Pasha   Подумал и понял свою ошибку. Это ошибка анализа за...   Feb 11 2008, 16:57


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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 12:20
Рейтинг@Mail.ru


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