![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
Arcanum |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 1.11.2011 Репутация: нет Всего: нет |
я электронщик и писал до этого на Асме и не знал проблем пока не понял что надо расти.
свою первую в жизни функцию решил написать для буфера UART есть два буфера - для приёмника и для передатчика. вот функции записи и чтения приёмника:
а вот для передатчика:
проверял следующей функцией:
вроде всё работает но почемуто он мне постоянно шлёт на 1 байт больше причём этот байт всегда начальный. пример(hex): 31 32 33 34 35 36 37 38 39 3A 31 то что это проблема функции ISR (USART_UDRE_vect) я понимаю но что конкретно не так - не знаю Это сообщение отредактировал(а) Arcanum - 18.12.2011, 21:37 |
||||||
|
|||||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Для себя я принял правило при написании кольцевых буферов (на асм и С): есть указатель на текущую свободную запись (в твоем случае индекс) и количество записей. При добавлении в список ты записываешь по адресу указателя, увеличиваешь его на 1, выравниваешь по размеру буфера (if (++i >= size) i = 0;) и если буфер еще не заполнен увеличиваешь количество записей на 1. Чтение если буфер не пуст: вычитаешь из указателя количество записей, выравниваешь по границе буфера (if ((i -= count) < 0) i += size;), берешь значение, количество записей уменьшаешь на 1.
Практика использования двух указателей (индексов) ведет к тому, что тебе сложно создать условие "буфер пуст" или "буфер полон" без введения дополнительных переменных. А это лишние условия и ошибки. |
|||
|
||||
Arcanum |
|
||||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 1.11.2011 Репутация: нет Всего: нет |
проблема решилась! не хватало return в одном месте:
Добавлено через 1 минуту и 39 секунд
можно ссылку на книжку где это подробнее описано? |
||||
|
|||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
не знаю я такой книжки. сам придумал при попытке реализации.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |