-
- Тоже была мысль шаблонизировать USARTы, но все упирается в обработчики прерываний у которых номера векторов заданы через #pragma - AlexG(08.05.2013 13:05)
- Дык, номер порта задать дефайном так и вектор через него же. - Хитрый Китаец(08.05.2013 15:17)
- А если таких портов несколько? USARTC0, USARTF1 и тд? - Apтём(08.05.2013 15:21)
- А в базовый адрес порта не упирается? Пример реализации не покажите? - Apтём(08.05.2013 13:55)
- Мой вариант сейчас выглядит так. До полной универсальности не доводил, цель была только по возможности устранить дублирование кода и сделать гибкое сопоставление USARTа и реализации протокола обмена. AlexG(08.05.2013 14:32 - 14:39)
- Спасибо. - Apтём(08.05.2013 15:09)
- За такой код надо не спасибо говорить, а в морду бить - ничегошеньки непонятно :) - Ксения(09.05.2013 16:13)
- Как так в морду? Надо к людям мягше, смотреть ширше... Apтём(36 знак., 09.05.2013 16:26)
- Лично я ничего в нем не поняла - жуть какая-то! На мой взгляд USART устроен предельно примитивно: сперва проверяешь бит о том, что передатчик пуст, а потом в него кидаешь байт. А если по прерыванию, то то сразу кидаешь без проверки. Зачем же тут Ксения(327 знак., 09.05.2013 16:43)
- Обычно у меня тоже все более-менее примитивно, но в этот раз в устройстве два порта и четыре переключаемых совершенно разнородных режима их работы (от отладочной печати до Modbus-RTU). Пришлось делать промежуточный слой устраняющий привязку кода к AlexG(791 знак., 09.05.2013 17:19)
- Вы действительно переключаете в приложениях порты/протоколы в рантайме? - Vit(09.05.2013 17:31)
- да, но только в одном приложении, во всех предыдущих разработках назначение портов было фиксированным. - AlexG(09.05.2013 18:23)
- указатели на getchar()/putchar() недостаточно мобильны? Vit(213 знак., 09.05.2013 19:43)
- Спасибо, использовать int это хорошая идея. Про указатели не совсем понял. - AlexG(09.05.2013 20:14)
- указателям application_getchar/application_putchar можно присваивать значения UARTx_getchar/UARTx_putchar, где x может меняться - Vit(09.05.2013 23:50)
- Как выглядит использование getchar и putchar и они сами? - Apтём(10.05.2013 00:03)
- Не въехал в код... Apтём(352 знак., 10.05.2013 15:36)
- накалякал чегой-то Vit(2563 знак., 10.05.2013 07:50 - 10:13)
- ОК, спасибо, скопировал себе, пригодится в жизни)) Укажите еще, пожалуйста, для строки Serial1_RxBuf_RdIdx++; что это Atomic, т.к.она используется в ISR для сравнения. - Юра(10.05.2013 09:59, )
- ещё этот инкремент поставил строкой выше и один break в switch убрал(сделал провал) - Vit(10.05.2013 10:02 - 10:16)
- Кажется, при Serial1_RxBuf_WrIdx=63; Serial1_RxBuf_RdIdx=0; новое пришедшее данное вместо того чтобы быть отвергнутым, испортит вх.буфер[0]. - Юра(10.05.2013 09:37, )
- вроде поправил. и ещё чуток. - Vit(10.05.2013 09:44 - 09:59)
- ОК, спасибо, скопировал себе, пригодится в жизни)) Укажите еще, пожалуйста, для строки Serial1_RxBuf_RdIdx++; что это Atomic, т.к.она используется в ISR для сравнения. - Юра(10.05.2013 09:59, )
- Как выглядит использование getchar и putchar и они сами? - Apтём(10.05.2013 00:03)
- указателям application_getchar/application_putchar можно присваивать значения UARTx_getchar/UARTx_putchar, где x может меняться - Vit(09.05.2013 23:50)
- Спасибо, использовать int это хорошая идея. Про указатели не совсем понял. - AlexG(09.05.2013 20:14)
- указатели на getchar()/putchar() недостаточно мобильны? Vit(213 знак., 09.05.2013 19:43)
- да, но только в одном приложении, во всех предыдущих разработках назначение портов было фиксированным. - AlexG(09.05.2013 18:23)
- Вы действительно переключаете в приложениях порты/протоколы в рантайме? - Vit(09.05.2013 17:31)
- Там не просто uart, а RS485. Apтём(341 знак., 09.05.2013 16:58)
- Обычно у меня тоже все более-менее примитивно, но в этот раз в устройстве два порта и четыре переключаемых совершенно разнородных режима их работы (от отладочной печати до Modbus-RTU). Пришлось делать промежуточный слой устраняющий привязку кода к AlexG(791 знак., 09.05.2013 17:19)
- Лично я ничего в нем не поняла - жуть какая-то! На мой взгляд USART устроен предельно примитивно: сперва проверяешь бит о том, что передатчик пуст, а потом в него кидаешь байт. А если по прерыванию, то то сразу кидаешь без проверки. Зачем же тут Ксения(327 знак., 09.05.2013 16:43)
- Как так в морду? Надо к людям мягше, смотреть ширше... Apтём(36 знак., 09.05.2013 16:26)
- За такой код надо не спасибо говорить, а в морду бить - ничегошеньки непонятно :) - Ксения(09.05.2013 16:13)
- Спасибо. - Apтём(08.05.2013 15:09)
- Мой вариант сейчас выглядит так. До полной универсальности не доводил, цель была только по возможности устранить дублирование кода и сделать гибкое сопоставление USARTа и реализации протокола обмена. AlexG(08.05.2013 14:32 - 14:39)
- Дык, номер порта задать дефайном так и вектор через него же. - Хитрый Китаец(08.05.2013 15:17)
- Тоже была мысль шаблонизировать USARTы, но все упирается в обработчики прерываний у которых номера векторов заданы через #pragma - AlexG(08.05.2013 13:05)