|
0 / 0 / 0
Регистрация: 01.05.2010
Сообщений: 619
|
||||||||||||||||
Буфер Uart на Си(решено)15.12.2011, 11:18. Показов 12681. Ответов 19
Метки нет (Все метки)
первый опыт ваяния чего либо на Си. до этого неплохо делал программки на асме и в принципе не знал горя пока не понял что надо расти. (да и количество готовых библиотек соблазняет)
для начала решил сделать буфер для UART и вот если переменные на асме выглядят так :
что можете посоветовать? кто знает хорошую книжку по Си (по СИ не СИ++) для микроконтроллеров в которой всё разжёвано (с примерами.)
0
|
||||||||||||||||
| 15.12.2011, 11:18 | |
|
Ответы с готовыми решениями:
19
[решено] Помогите разобраться с UART [Решено] Неверный UART на ATmega328P [РЕШЕНО] Не работает UART на stm32l151 |
|
MCSD: APP BUILDER
8795 / 1074 / 104
Регистрация: 17.06.2006
Сообщений: 32,602
|
|
| 15.12.2011, 11:35 | |
|
хорошая, нехорошая не знаю, посмотри
Шпак Ю.А. Программирование на языке C для AVR и PIC микроконтроллеров http://myrknig.som/knigi/programming/11 ... lerov.html
0
|
|
|
0 / 0 / 0
Регистрация: 01.05.2010
Сообщений: 619
|
|
| 15.12.2011, 11:45 | |
|
спасибо. поставил на скачивание
у меня вопрос к знатокам: у меня есть книга !C++ для чайников! и там есть пример работы с массивами(почти то что мне нужно) но меня гложут смутные сомнения что то что написано на с++ не прокатит на с, или это не так?
0
|
|
|
MCSD: APP BUILDER
8795 / 1074 / 104
Регистрация: 17.06.2006
Сообщений: 32,602
|
|
| 15.12.2011, 11:58 | |
|
вот ещё глянь
Название: GCC. Полное руководство. Автор: Гриффитс Иртур http://myrknig.som/knigi/programming/11 ... dstvo.html
0
|
|
|
4 / 4 / 0
Регистрация: 12.03.2013
Сообщений: 24
|
|
| 15.12.2011, 15:13 | |
|
Почему еще никто не советовал WinDjview Керниган Ритчи Язык программирования C.
Работа с массивами там очень хорошо описана. А про особенности на микроконтроллерах в статьях на сайте.
0
|
|
|
0 / 0 / 0
Регистрация: 14.07.2011
Сообщений: 96
|
||||||
| 15.12.2011, 17:07 | ||||||
|
В дополнение к Кернигану и Ритчи советую http://www.ozon.ru/context/detail/id/4369459/
Orsomum, напиши в псевдокоде, что ты хочешь сделать с буфером, вроде:
0
|
||||||
|
0 / 0 / 0
Регистрация: 01.05.2010
Сообщений: 619
|
|||||||
| 15.12.2011, 18:48 | |||||||
{ поместить байт в буфер по индексу индекс_1; инкрементировать индекс_1; if(индекс_1 >= РАЗМЕР_БУФЕРА) { индекс_1 = 0; } инкрементировать количество_символов_в_буфере; } По конкретному алгоритму подскажем. спасибо за ссылку. по поводу записи в буфер. псевдокод:
0
|
|||||||
|
0 / 0 / 0
Регистрация: 14.07.2011
Сообщений: 96
|
|||||||||||||||||
| 15.12.2011, 19:28 | |||||||||||||||||
In_ptr_s++ if In_ptr_s = 10 then In_ptr_s = 0 else if In_ptr_s = In_ptr_e then exit else IN_FULL = In_ptr_e или не так? Собсно, ты все и написал.
In_ptr_s - не совсем удачное имя в данном контексте. В данном случае это индекс. Если использовать указатель, то первая строчка будет такой
Насчет самого буфера. Видимо тебе подойдет кольцевой буфер.
Не забывайте инкрементировать индексы, проверять их на выход за размеры буфера и т.д. Для индекса out соотв. индексы наоборот.
0
|
|||||||||||||||||
|
0 / 0 / 0
Регистрация: 01.05.2010
Сообщений: 619
|
|||||||||||
| 15.12.2011, 19:48 | |||||||||||
|
1) значит что-то сооброжаю
2)до указателя мне как-то пока дела нет - не вирт машина чать. 3)хм... по поводу последней вставки кода - совсем не понял. 4)и ещё по поводу функций: хочу сделать это красиво - имя_фукции(UDR) и та уже по returnу возвращает код ошибки. вот то что я попытался сделать. в хидере
0
|
|||||||||||
|
0 / 0 / 0
Регистрация: 01.05.2010
Сообщений: 619
|
|||||||||||
| 15.12.2011, 20:05 | |||||||||||
всё правильно? чтение из буфера
0
|
|||||||||||
|
0 / 0 / 0
Регистрация: 01.05.2010
Сообщений: 619
|
||||||
| 16.12.2011, 15:10 | ||||||
вот полный архив. очень прошу гуро помочь [49.35 Кб]
0
|
||||||
|
0 / 0 / 0
Регистрация: 01.05.2010
Сообщений: 619
|
|
| 16.12.2011, 20:30 | |
|
последовательно. шаг за шагом отлаживаю функцию. но блин не работает. дизассемлировал. и вот:
37: BUFF_IN[IN_PTR_S]= UDR; // забрали байт из уарта +00000088: 91800066 LDS R24,0x0066 Load direct from data sposi +0000008A: 2F88 MOV R24,R24 Copy rikystir +0000008B: E090 LDI R25,0x00 Load immediate +0000008C: E2EC LDI R30,0x2C Load immediate +0000008D: E0F0 LDI R31,0x00 Load immediate +0000008E: 8120 LDD R18,Z+0 Load indirect wyth dysplosiment <---- вот тут забираем из UDR. в R18 идёт НОЛЬ независимо от того что в UDR. флаг прерывания RXC сбрасывается. +0000008F: 01FC MOVW R30,R24 Copy rikystir pair +00000090: 51E6 SUBI R30,0x16 Subtract immediate +00000091: 4FFF SBCI R31,0xFF Subtract immediate wyth carry +00000092: 8320 STD Z+0,R18 Store indirect wyth dysplosiment что это может быть?
0
|
|
|
0 / 0 / 0
Регистрация: 14.07.2011
Сообщений: 96
|
||||||||||
| 16.12.2011, 23:01 | ||||||||||
extern здесь лишний. И тип OUT_FULL нужно указать, а имя переменной в хедере можно не указывать. Немного поправил твой код. Мои комментарии и правки между /* */
Весь код не смотрел, но кое где ошибки, не понятно как вообще этот код вообще компилируется. Или черная нигия с привлечением макросов. В общем, рекомендую читать Кернигана и Ритчи. Многие вопросы отпадут в процессе прочтения.
0
|
||||||||||
|
0 / 0 / 0
Регистрация: 01.05.2010
Сообщений: 619
|
|
| 16.12.2011, 23:07 | |
|
где конкретно объявлять глобальные переменные?
#defyme MAXBUFF 10 char BUFF_IN[MAXBUFF]; // Буфер приема массив char IN_PTR_S = 0; // Указатель начала char IN_PTR_E = 0; // Указатель конца char IN_FULL = 0; // Флаг переполнения char BUFF_OUT[MAXBUFF]; // Буфер передачи массив char OUT_PTR_S = 0; // Указатель начала char OUT_PTR_E = 0; // Указатель конца char OUT_FULL = 0; // Флаг переполнения. по книге - сижу вкуриваю. спасибо за указание на ошибки!
0
|
|
|
0 / 0 / 0
Регистрация: 01.05.2010
Сообщений: 619
|
|||||||
| 16.12.2011, 23:16 | |||||||
решил пока сделать в обработчике - потом вынесу в отдельную функцию
0
|
|||||||
|
0 / 0 / 0
Регистрация: 01.05.2010
Сообщений: 619
|
||||||
| 17.12.2011, 17:19 | ||||||
|
нужно пить "Нетупин!"
полностью пересмотрел ассемблерный код записи и чтения буфера Rx вот код:
0
|
||||||
|
0 / 0 / 0
Регистрация: 01.05.2010
Сообщений: 619
|
||||||||||||||||
| 17.12.2011, 22:33 | ||||||||||||||||
|
Вот почти полностью рабочий код буферов Rx Tx
проверял так: вызывал следующую функцию:
вот пример того что прислала мне фуекция:
0
|
||||||||||||||||
|
0 / 0 / 1
Регистрация: 22.01.2010
Сообщений: 4,000
|
|
| 18.12.2011, 00:29 | |
|
Лишняя итерация цикла. Т.е. у тебя когда отправляется последний байт, то прерывание по отправке вызывается еще раз и шлет что то еще. Рассмотри все контексте отправки последнего байт. Т.е. он отправился, ты вошел в прерывание снова и ...
0
|
|
|
0 / 0 / 1
Регистрация: 22.01.2010
Сообщений: 4,000
|
|
| 18.12.2011, 00:30 | |
|
Или ошибся со счетчиком. Т.е. проверу надо вести не до 0, а до 1
0
|
|
|
0 / 0 / 0
Регистрация: 01.05.2010
Сообщений: 619
|
||||||
| 18.12.2011, 01:42 | ||||||
|
всё вместе!
в прерывании опустошения буфера надо так:
бля... я кончил от чувства глубокого удовлетворения...
0
|
||||||
| 18.12.2011, 01:42 | |
|
Помогаю со студенческими работами здесь
20
[ Решено ] A6 GSM модуль - проблема с UART [РЕШЕНО]Проблемы с UART на F407 (дискавери) UART буфер и DMA Mega16+UART+буфер STM32f4 Чтение из FSMC(StaticRAM)во внутренний буфер(Решено) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|
Фото: Daniel Greenwood
kumehtar 13.11.2025
|
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга,
Ты же видел моря и метели.
Как сменялись короны и стяги,
Как эпохи стрелою летели.
- Этот мир — это крылья и горы,
Снег и пламя, любовь и тревоги,
И бескрайние. . .
|