Отговори на тема  [ 6 мнения ] 
FIFO буфер 
Автор Съобщение
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Нед Яну 30, 2005 4:25 pm
Мнения: 47
Мнение FIFO буфер
Видях че има подобна тема,но тъй като почти нищо не разбрах (а от малкото което разбрах ми се струва че не ми върши работа) реших да пусна нова тема.

Искам да направя FIFO буфер за команди за PIC16 на asm, тъй като със C не съм се занимавал и нещо не ми се отдава (а и стаалата част от проекта е на asm и не ми се пренаписва).
Идеята е следната - процесора си изпълнява команди последователно от буфер, а по UART, SPI или IIC се предават нови, работа се прекъсва и новите команди се тъпчат в края на буфер-а. Приемането, както и разпознаването на командите и аргументите не ми е проблем.
Дотук добре ама реализацията на тоя буфер ми се губи.
Единственото което ми хрумва е действие с груба сила - при извличане на първата стойност от буфер-а останалите да се преместват една клетка напред и още една клетка в която да се пази адреса на послендата заета клетка от буфер-а(или броя на командите, което е същото). Обаче тук проблема е, че при n команди в буфер-а, при всяко извличане ще трябва да се преместват n-1 клетки, което отнема доста време.
Предполагам че има някакъв по интелегентен начин на решение на проблема.
Моля помогнете :roll: :D


Пет Дек 16, 2005 11:02 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Окт 31, 2004 9:19 pm
Мнения: 4464
Местоположение: Stara Zagora
Мнение 
2 указателя към начало и краи на опашката. Не е нужно да местиш данните :)


Пет Дек 16, 2005 11:06 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Нед Яну 30, 2005 4:25 pm
Мнения: 47
Мнение 
Ами аз мислех че нещо подобно е решението ама не ми е съвсем ясно как ще се реализира.
Ако не ти е проблем ще може ли да ми го обясниш по-подробно или ако ти се намира някакъв код под ръка (предполагам че най-вероятно сам си си го писал не ти се дава ама наистина не ми е ясно как ще стане).


Пет Дек 16, 2005 11:17 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Окт 31, 2004 9:19 pm
Мнения: 4464
Местоположение: Stara Zagora
Мнение 
Сори ама аз и асемблера не се обичаме много и не пиша на асемблер. Ама след като работиш на асемблер и ти казах принципа не би трябвало да ти е проблем да го реализираш.


Пет Дек 16, 2005 11:52 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Яну 26, 2005 2:01 pm
Мнения: 1952
Местоположение: Варна
Мнение 
Ами ако положиш малко усилия да научиш така недолюбвания от теб С ще разбереш каква е логиката на това което ти казва Никола за указателите.
Имаш две променливи които пазят съответно адресите на началото и края на буфера. Вместо да преместваш данните в буфера сменяш съответно адресите съхранявани в тези променливи. Единият адрес ти сочи към последната приета команда това е входа на FIFO другият ти сочи командата която е наред да се изпълни т. е. изхода на FIFO. Съответно имаш задължително проверки дали началото и края не излизат от определената за FIFO област от паметта.


Съб Дек 17, 2005 1:12 am
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Нед Яну 30, 2005 4:25 pm
Мнения: 47
Мнение 
След като се замислих доста серизно разбрах колко лесно било.
Мерси много !!!

П.П. По въпроса за С-то - със С за PC нямам проблеми, но за PIC не съм се занимавал. Може ли да ме насочите към компилатори и литература, за да го науча най-после.


Съб Дек 17, 2005 1:20 am
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 6 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: Google [Bot] и 9 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни