-
- В документации на scmRTOS есть, в коде событий ОС. Более приземленно - ногодрыг -> - amusin(08.05.2013 13:55, ссылка)
- Не только в коде событий. Для GPIO тоже есть - Apтём(152 знак., 08.05.2013 15:05)
- а что там такого нельзя заменить макросами/инлайнами ? - zeleny(10.05.2013 18:40)
- Там ничего нет такого, что нельзя заменить макросами, но лучше всё это на асме сделать. - Apтём(10.05.2013 18:45)
- делай, никто ж не мешает... - zeleny(10.05.2013 23:40)
- Хателось бы, да... Но как лучше не получается, приходится как всегда. - Apтём(10.05.2013 23:52)
- асм - для лузеров, крутые пацаны кодят прямо в HEX. - =AlexD=(10.05.2013 18:49)
- А самые крутые наверное в BIN... - Apтём(10.05.2013 18:52)
- делай, никто ж не мешает... - zeleny(10.05.2013 23:40)
- охоспидябожемой, ну заменяй, тебя никто не неволит. - =AlexD=(10.05.2013 18:43)
- Там ничего нет такого, что нельзя заменить макросами, но лучше всё это на асме сделать. - Apтём(10.05.2013 18:45)
- а что там такого нельзя заменить макросами/инлайнами ? - zeleny(10.05.2013 18:40)
- Спасибо! GPIO template class - весьма показательно. - Леонид Иванович(08.05.2013 14:02)
- Не только в коде событий. Для GPIO тоже есть - Apтём(152 знак., 08.05.2013 15:05)
- Макросы обычного С чем не устраивают? - Vladimir Ljaschko(08.05.2013 12:20)
- Нет строгой типизации, вестимо - amusin(08.05.2013 13:57)
- для строгой типизации вместо макросов есть inline функции - zeleny(10.05.2013 18:20)
- Там свои проблемы - требуется высокий уровень оптимизации, иногда происходит конфликт интересов при отладке, да и тот же вопрос - как указать номер прерывания в прагме? Для решения этих вопросов и нужно C++, говорят... - Vladimir Ljaschko(11.05.2013 00:05)
- Шаблоны в C++ не позволяют задать номер вектора в прагме. C Cortex'ами может получиться, там вызов обработчиков обработчиков прерываний прописан в стартапе, можно попробовать прописать вызов нужных статических методов шаблонных классов. - AlexG(11.05.2013 10:22)
- Тогда борьба за еще одну оболочку абстракций без конкретной цели, ради понтов ;) В случае макросов можно хотя бы результат работы препроцессора увидеть. - Vladimir Ljaschko(11.05.2013 10:31)
- Программа состоит не только из обработчиков прерываний. - Леонид Иванович(11.05.2013 11:00)
- Тогда борьба за еще одну оболочку абстракций без конкретной цели, ради понтов ;) В случае макросов можно хотя бы результат работы препроцессора увидеть. - Vladimir Ljaschko(11.05.2013 10:31)
- Шаблоны в C++ не позволяют задать номер вектора в прагме. C Cortex'ами может получиться, там вызов обработчиков обработчиков прерываний прописан в стартапе, можно попробовать прописать вызов нужных статических методов шаблонных классов. - AlexG(11.05.2013 10:22)
- Там свои проблемы - требуется высокий уровень оптимизации, иногда происходит конфликт интересов при отладке, да и тот же вопрос - как указать номер прерывания в прагме? Для решения этих вопросов и нужно C++, говорят... - Vladimir Ljaschko(11.05.2013 00:05)
- для строгой типизации вместо макросов есть inline функции - zeleny(10.05.2013 18:20)
- Нет строгой типизации, вестимо - amusin(08.05.2013 13:57)
- А у меня мысль противоположная - о том, что шаблоны не стоит использовать ни в каких embedded-задачах, ни больших, ни малых. В таких задачах всё должно быть по возможности явным. Если есть функция, то вот ее тело, чтоб отладчиком стать, если Ксения(74 знак., 08.05.2013 12:14 - 12:16)
- Что значит искать? Если нужно посмотреть порожденный код - то ,в тех модулях, где он используется. А зашаблонизировать одинаковые UART'ы на борту очень удобно. - Хитрый Китаец(08.05.2013 12:20)
- Тоже была мысль шаблонизировать 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)
- Вообще-то нормальный отладчик должен уметь связывать машинный код с шаблоном, чтобы можно было ходить по строкам. А ставить точки останова - это да: он должен спрашивать "в каком именно экземпляре?" - SciFi(08.05.2013 12:19)
- Что значит искать? Если нужно посмотреть порожденный код - то ,в тех модулях, где он используется. А зашаблонизировать одинаковые UART'ы на борту очень удобно. - Хитрый Китаец(08.05.2013 12:20)
- В документации на scmRTOS есть, в коде событий ОС. Более приземленно - ногодрыг -> - amusin(08.05.2013 13:55, ссылка)