Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
21.10.2010, 12:55
|
|
Вид на жительство
Регистрация: 03.06.2007
Сообщений: 368
Сказал спасибо: 3
Сказали Спасибо 59 раз(а) в 52 сообщении(ях)
|
Re: Вопросы от NikMih_1
Ну,а с PICC то какие проблемы,там всё просто.В папке Examples полно примеров.
|
|
|
|
21.10.2010, 13:26
|
|
Гражданин KAZUS.RU
Регистрация: 25.02.2008
Сообщений: 997
Сказал спасибо: 223
Сказали Спасибо 72 раз(а) в 58 сообщении(ях)
|
Re: Вопросы от NikMih_1
Сообщение от Vov123
|
Ну,а с PICC то какие проблемы,там всё просто.В папке Examples полно примеров.
|
Вам всё просто, мне нет.
|
|
|
|
21.10.2010, 13:31
|
|
Вид на жительство
Регистрация: 03.06.2007
Сообщений: 368
Сказал спасибо: 3
Сказали Спасибо 59 раз(а) в 52 сообщении(ях)
|
Re: Вопросы от NikMih_1
Вам ссылку на книгу Шпака дали,как раз про PICC, вам даже её полистать лень
|
|
|
|
21.10.2010, 18:39
|
|
Почётный гражданин KAZUS.RU
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
|
Re: Вопросы от NikMih_1
Сообщение от NikMih_1
|
Во, даже название есть. Клёво! Осталось только сделать.
|
Очень схематично:
1. Организовать буфер размером, скажем в 10
Код:
|
#define buf_size 10
u8 buffer[buf_size]; |
2. Выделить две переменные для указателей чтения из буфера и записи в него и сразу их настроить на начало буфера
Код:
|
u8 rp = 0;
г8 wp = 0; |
3. Далее осмыслить, что будут существовать две независимые функции, чтение из буфера и запись в него. Каждая функция будет работать со своим указателем.
4. Чтение из буфера.
Перед чтением проверить, не одинаковы ли значения указателей. Если да, то всё уже вычитано, читать нечего. Возвращать по вкусу, можно false, можно как-нибудь ещё
Код:
|
if( rp == wp ) return 0;
else
tmp = buffer[rp];
if( rp++ == buf_size ) rp = 0;
return tmp; |
Это если данные в буфере не содержат 0. Оставляю место "на подумать, как это обойти"...
5. Запись в буфер. Очень похоже, но с контролем уже положения указателя записи. Записывать всегда будем в заранее подготовленное место по указателю.
Код:
|
buffer[wp++] = data;
if( wp == buf_size ) wp = 0; |
Здесь не учитывается переход через указатель чтения, таким образом по моему примеру невычитанные данные пропадут.
Оставляю место "для подумать, как это обойти..."
|
|
|
|
21.10.2010, 19:53
|
|
Гражданин KAZUS.RU
Регистрация: 25.02.2008
Сообщений: 997
Сказал спасибо: 223
Сказали Спасибо 72 раз(а) в 58 сообщении(ях)
|
Re: Вопросы от NikMih_1
Сообщение от ut1wpr
|
2. Выделить две переменные для указателей чтения из буфера и записи в него и сразу их настроить на начало буфера
|
Именно так я и планировал сделать только как конкретно не знал. Да и сейчас не знаю кто такой r8 в выражении г8 wp = 0; Вопрос, если я так зафиксирую ячейку начала буфера, то его расположение не будет ёрзать по РАМ по инициативе СИ? Очень бы не хотелось.
|
|
|
|
21.10.2010, 20:06
|
|
Супер-модератор
Регистрация: 15.10.2007
Сообщений: 3,530
Сказал спасибо: 172
Сказали Спасибо 1,560 раз(а) в 810 сообщении(ях)
|
Re: Вопросы от NikMih_1
Сообщение от NikMih_1
|
Именно так я и планировал сделать только как конкретно не знал. Да и сейчас не знаю кто такой r8 в выражении г8 wp = 0; Вопрос, если я так зафиксирую ячейку начала буфера, то его расположение не будет ёрзать по РАМ по инициативе СИ? Очень бы не хотелось.
|
не г8, а u8 я так понимаю это unsigned char, объявленное через typedef unsigned char u8;.
Что значит "ёрзать"?
ut1wpr вы если даете такие примеры, то хоть поясняйте, что где. А то видите не понятно, что такое u8.
|
|
|
|
21.10.2010, 22:32
|
|
Почётный гражданин KAZUS.RU
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
|
Re: Вопросы от NikMih_1
Сообщение от realid
|
не г8, а u8 я так понимаю это unsigned char, объявленное через typedef unsigned char u8;.
Что значит "ёрзать"?
ut1wpr вы если даете такие примеры, то хоть поясняйте, что где. А то видите не понятно, что такое u8.
|
Извините. Раскладка не переключилась. Бывает. ![Улыбка](images/smilies/icon_smile.gif)
Безусловно Вы правы, это переобъявленный тип. Такое мы делаем для сокращения написания. Чисто умозрительно. Согласитесь, проще написать u8, чем unsigned char. Правда, можно и не определять новый тип, а просто применить подмену макросом (#define u8 unsigned char), но строже, безусловно, именно определить тип.
А за пример я приношу извинения. Он, безусловно, больше скелетный, чем рабочий. Просто мне показалось, что для спрашивающего, с его уровнем подготовки, не мешало бы в придачу к словесным разъяснениям привести хоть пару строчек. Простых. На стандартном ANSI C. От K&R...
Лично я сторонник начального обучения по методу ЛЛЛ (Лихорадочное Листание Листингов) ![Улыбка](images/smilies/icon_smile.gif) Пусть человек смотрит, как делают другие, а как ему будет лучше, проще и удобнее, потом решит сам. Тем то и силён Си, что он предоставляет такую возможность выбора. Одно и то же можно многими способами написать...
|
|
|
|
21.10.2010, 22:56
|
|
Почётный гражданин KAZUS.RU
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
|
Re: Вопросы от NikMih_1
Сообщение от NikMih_1
|
Да и сейчас не знаю кто такой r8 в выражении г8 wp = 0; Вопрос, если я так зафиксирую ячейку начала буфера, то его расположение не будет ёрзать по РАМ по инициативе СИ? Очень бы не хотелось.
|
г8 это u8 на кириличной раскладке. ![Улыбка](images/smilies/icon_smile.gif) Ну не переключилась клава, разве не видно, что u и г на одной клавише? ![Улыбка](images/smilies/icon_smile.gif)
Ни один из компиляторов не имеет ИНИЦИАТИВЫ. Она только у вас, как у автора программы. "Ёрзание", смещение указателей по буферу, находится полностью под вашим контролем.
rp++ или wp++ это постинкрементные операторы. Они вызывают увеличение переменной на 1 после выполнения действия. В вашей трактовке это и есть "ёрзание". Этим и достигается смещение указателя.
Но мне кажется, что один из авторов вышеприведённых постов прав. Вы упорно не желаете перечитывать описание синтаксиса простейшей версии Си. Извините, но какой-никакой базис должен быть. Оставьте в покое С++, вернитесь к Кернигану-Ричи. Если я увижу, что вы будете задавать более осмысленные вопросы, готов этот же пример (который я накропал) построчно прокомментировать и снова вам предложить. Но на данном этапе, мне кажется, и этого будет мало. Боюсь мои комментарии потянут за собой комментарии на комментарии. И так мы дойдём до описания типов данных, операторов, функций и всего прочего, что именуется "основы языка" и отлично изложены в огромном количестве литературы. А я бы не хотел всё это пересказывать. Читайте, учите.
JFYI - я такой же "старый маразматик". Мне скоро 62. Программирую на любительском уровне. Си, Паскаль, Делфи. Кормлюсь системным администрированием. По работе Перл, Питон, ПХП, шелл-скрипты, джава-скрипты... FreeBSD, Linux, CLI многих производителей...
А ещё ведь и хобби - hamradio. В эфире с 1962 года.
И учусь, учусь, учусь... И не собираюсь останавливаться. Как много ещё непознанного
|
|
|
|
21.10.2010, 23:07
|
|
Гражданин KAZUS.RU
Регистрация: 25.02.2008
Сообщений: 997
Сказал спасибо: 223
Сказали Спасибо 72 раз(а) в 58 сообщении(ях)
|
Re: Вопросы от NikMih_1
Сообщение от realid
|
Что значит "ёрзать"?
|
По инициативе СИ смещать начало массива с какой-то высокой целью, типа уменьшения кода.
Сообщение от ut1wpr
|
г8 это u8 на кириличной раскладке. Ну не переключилась клава, разве не видно, что u и г на одной клавише?
|
У меня на этой клавище Ц и W, так что не видно. Спасибо за разъяснение, а то башка кругом идёт. Я в общем-то уже всё понял, даже с таймером для вывода данных в порт определился - у dsPIC30 это часть 3 таймера 2/3, которая допускает чтение и запись содержимого. Получается, что мне осталось где-то найти файл dspic.h или самому его написать ![Очень счастлив](images/smilies/icon_grin.gif) или писать всё в ассемблере. Слава Богу, я уже не боюсь этого слова, поскольку система комманд процессора и есть ассемблер. Возни много, но результат гарантирован при моём воловьем упрямстве
|
|
|
|
21.10.2010, 23:16
|
|
Супер-модератор
Регистрация: 15.10.2007
Сообщений: 3,530
Сказал спасибо: 172
Сказали Спасибо 1,560 раз(а) в 810 сообщении(ях)
|
Re: Вопросы от NikMih_1
Сообщение от NikMih_1
|
Слава Богу, я уже не боюсь этого слова, поскольку система комманд процессора и есть ассемблер.
|
Набор инструкций это набор. Ассемблер это "компилятор исходного текста программы, написанной на языке ассемблера, в программу на машинном языке."
Не тот компилятор вы выбрали. Говорил вам, скачивайте MCC30 (C30). Сказали что уже стоит, а во всех постах упоминаете Hi-tech.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 05:56.
|
|