Elektronika.lt
 2024 m. kovo 29 d. Projektas | Reklama | Žinokite | Klausimai | Prisidėkite | Atsiliepimai | Kontaktai
Paieška portale
EN Facebook RSS

 Kas naujo  Katalogas  Parduotuvės  Forumas  Tinklaraščiai
 Pirmas puslapisSąrašas
 Forumas / + pokalbiai
 - Paieška forume
 - D.U.K. / Forumo taisyklės
 - Narių sąrašas
 - Registruotis
 - Prisijungti

Elektronika.lt portalo forumas

Jūs esate neprisijungęs lankytojas. Norint dalyvauti diskusijose, būtina užsiregistruoti ir prisijungti prie forumo. Prisijungę galėsite kurti naujas temas, atsakyti į kitų užduotus klausimus, balsuoti forumo apklausose.

Administracija pasilieka teisę pašalinti pasisakymus bei dalyvius, kurie nesilaiko forumo taisyklių. Pastebėjus nusižengimus, prašome pranešti.

Dabar yra 2024 03 29, 09:26. Visos datos yra GMT + 2 valandos.
 Forumas » Mikrovaldikliai » Žiedinio buferio panaudojimas:
Jūs negalite rašyti naujų pranešimų į šį forumą
Jūs negalite atsakinėti į pranešimus šiame forume
Jūs negalite redaguoti savo pranešimų šiame forume
Jūs negalite ištrinti savo pranešimų šiame forume
Jūs negalite dalyvauti apklausose šiame forume
 
  
Puslapis 11
Pradėti naują temą  Atsakyti į pranešimą Rodyti ankstesnį pranešimą :: Rodyti kitą pranešimą 
 Žiedinio buferio panaudojimas:
PranešimasParašytas: 2016 12 02, 14:32 Pranešti apie taisyklių pažeidimą Atsakyti su citata
krienas
Patyręs dalyvis
Patyręs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Darant kontrolerius nėra greitesnio budo, kaip hiperterminalo panaudojimas.
Kadangi per Uartą perdavimas lėtas palyginus su kontoleriio darbu, dažniausiai sėdi funkcijoje, kol siunčia dešrą. Šiam reikalui siūlau naudoti žiedinį buferį. Sugalvotą berods IBM klaviatūrai.
Privalumai: Nebereikia sėdėti funkcijoje, nebereikia sekti pabaigos simbolio arba ilgio, buferio ilgis gali dvigubai -1 trumpesnis būti nei ilgiausia dešra.
Algoritmas nesudėtingas, turi du indeksus pradžios ir pabaigos. Kai įrašinėji keiti pabaigos indeksą ir paleidi pertraukimus, kai Uart siunčia keičia pradžios simbolį, kai sutampa uždraudžia pertraukimus ir viskas. Įdėsiu ARMo kodą.
Kodas:

#define kiek_max  256
unsigned char buferio_pabaiga =0;
 unsigned char  buferio_pradzia =0;
unsigned char Tx_buferis[kiek_max];
 void USART2_IRQHandler(void) // čia paimtas gabalas
{
   if( USART_GetITStatus(USART2, USART_IT_TXE) == SET)
   {
 if (buferio_pradzia != buferio_pabaiga)
 {
    USART2 -> DR = Tx_buferis[buferio_pradzia];
 buferio_pradzia++;
 }
 else
{
USART2 -> CR1 &= 0xFFFFFF7F; // draudžiu pertraukimus
}

}

}
 void Uzkrauti_ziedini_buferi1(char *s, unsigned char kiek)
 {
   unsigned char i, b;
   
    b= buferio_pabaiga; // lokalus kintamasis, kad nebalamutint siuntimo 
 for (i = 0; i < kiek; i++)
    {
          b++;
    Tx_buferis[b] = *s;
       s++;
   
    }
    buferio_pabaiga =b;
    USART2 -> CR1 |= 0x00000080; // leidžiu pertraukimus
 }

Gal skliaustu kiekis sutampa neskaičiavau, kofiguracijos nedėjau.
Trukumas: pirmas užkrovimas praleidžia 0 elementą, nenorėjau galvos sukti. Panaudoti kintamieji unsigned char tai baitas, jei incrementuosi 0xFF gausi 0. Funkcijai reikia nurodyti simboliu kiekį. Va tiek galit naudoti, gal palengvins gyvenimą.
Pvz:
Kodas:

Uzkrauti_ziedini_buferi1(" |   1 Labas                       |\r\n", 38);

Kadangi terminalas bedrauja AScii kodu tai vesit skaičiu, pirmiausi reikia pasiversti į Ascii sibolius.....
Very Happy Very Happy Very Happy[/code]
 Žiedinio buferio panaudojimas:
PranešimasParašytas: 2016 12 02, 15:19 Pranešti apie taisyklių pažeidimą Atsakyti su citata
AlgisL
Senbuvis
Senbuvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Vaikine, manau jog tavo kode pilna skyliu (klaidu).
 Žiedinio buferio panaudojimas:
PranešimasParašytas: 2016 12 02, 15:37 Pranešti apie taisyklių pažeidimą Atsakyti su citata
krienas
Patyręs dalyvis
Patyręs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Nu nors vieną kurios nežinau..... Very Happy
 Žiedinio buferio panaudojimas:
PranešimasParašytas: 2016 12 02, 15:52 Pranešti apie taisyklių pažeidimą Atsakyti su citata
AlgisL
Senbuvis
Senbuvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
1) pakeitus kiek_max reiksme kitokia nei 256 - algoritmas dirbs neteisingai;
2) jei b++ darytum po duomenu irasymo, o ne pries, tai ir pirma kart viskas butu ok;
3) jei i buferi is eiles paduotum "desru", kuriu ilgis virsytu laisva vieta, tai ir vel nieko gero;
4) jei uzpildant buferi perduotum ilgi sveikai besidalinanti is 256 (arba 0), tai ir vel gautum efektus.
 Žiedinio buferio panaudojimas:
PranešimasParašytas: 2016 12 02, 16:09 Pranešti apie taisyklių pažeidimą Atsakyti su citata
krienas
Patyręs dalyvis
Patyręs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
kiek_max taip ir sugalvotas buvo, jei keisi dydį data tikrinimo algoritmo reiks.
Jei siunti kelias dešras, neužmiršk, kad siuntimas vyksta ir atsilaisvina vieta, taip užpildyti nesunku.... Very Happy
Tas pirmas kartas tai po reseto, po to kaip iš pypkės eina...
O aplamai tai principas ir tobulumui ribų nėra.... Very Happy
b++ prieš todėl, kad pabaiga ir pradžia sutampa reikia indeksą padydint...
Malonu greit gaudaisi.... Very Happy Very Happy Very Happy Very Happy
 Žiedinio buferio panaudojimas:
PranešimasParašytas: 2016 12 02, 16:20 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Digix
VIP narys
VIP narys
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
koks tikslas naudoti ziedini buferi?
ar ne poaprasciaus tiesiog paprastas buferis nes betkokiu atveju komanda reikia priimti visa pries vykdant.

tai tokiu atveju tiesiog rasom viska i buferi o gavus \n simboli perduodam visa buferi vykdymui o ivykdzius trinam viska lauk ir laukiam naujos komandos.
 Žiedinio buferio panaudojimas:
PranešimasParašytas: 2016 12 02, 16:24 Pranešti apie taisyklių pažeidimą Atsakyti su citata
krienas
Patyręs dalyvis
Patyręs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
O jei komanda viena, o išsiųsti daug, analogas kodas, kad spjaudytų laukan....
Fainas daiktas, panaudokit patiks.... Very Happy
 Žiedinio buferio panaudojimas:
PranešimasParašytas: 2016 12 02, 17:05 Pranešti apie taisyklių pažeidimą Atsakyti su citata
sopkls
Senbuvis
Senbuvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Siūlyčiau rašant protingus patarimus pamiršti tokius tik tau vienam suprantamus žodžius kaip <dešra> ir panašiai.
 Žiedinio buferio panaudojimas:
PranešimasParašytas: 2016 12 02, 17:10 Pranešti apie taisyklių pažeidimą Atsakyti su citata
krienas
Patyręs dalyvis
Patyręs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Na jau nuo senų laikų "dešra" vadindavom visa tai kas išeidavo per com_portą. Pastaba teisinga priimu. Very Happy Very Happy
 Žiedinio buferio panaudojimas:
PranešimasParašytas: 2016 12 02, 20:34 Pranešti apie taisyklių pažeidimą Atsakyti su citata
AlgisL
Senbuvis
Senbuvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
gali rasyti ir taip:
#define max_kiek 0x20 // let buffer size to 2^n

USART2 -> DR = Tx_buferis[buferio_pradzia];
buferio_pradzia = ++buferio_pradzia & (max_kiek-1);

do {
int laisva = buferio_pabaiga > buferio_pradzia;
if(laisva < 0) laisva = max_kiek-laisva;
} while(laisva < kiek);

Tx_buferis[b++] = *s++;
b &= (max_kiek-1);


Paskutinį kartą redagavo AlgisL, 2016 12 02, 20:49. Redaguota 1 kartą
 Žiedinio buferio panaudojimas:
PranešimasParašytas: 2016 12 02, 20:49 Pranešti apie taisyklių pažeidimą Atsakyti su citata
krienas
Patyręs dalyvis
Patyręs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Ties & skliaustų gal reikia, pas mane dvi funkcijos viena pertraukimų kita užkraut. Su = ++ pasiusi du tuos pačius simbolius pabaigoje ir pradžioje...
Mandrai labai, už loginės sandaugos idėją dėkavoju... Very Happy Very Happy Very Happy
Išeidamas iš užkrovimo paleidi pertraukimus pagal požymį siuntimo registras tuščias ir pradeda siusti. Gali vėl porciją duomenų užkrauti siuntimas vyksta kol pradžia nepasiveja pabaigos. Kai pasivijo sustoja ir laukia, kol vėl porciją duomenų užkrausi, toliau jokio laukimo. Sustoja kai pradžia pasivijo pabaigą, bet tas baitas jau būna išsiųstas, rašo į sekančią ląstelę.


Paskutinį kartą redagavo krienas, 2016 12 02, 21:06. Redaguota 1 kartą
 Žiedinio buferio panaudojimas:
PranešimasParašytas: 2016 12 02, 20:54 Pranešti apie taisyklių pažeidimą Atsakyti su citata
AlgisL
Senbuvis
Senbuvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
++kintamasis juk yra preinkrementas
kintamasis++ atatinkamai postinkrementas
buf[idx++] = *s++; cia vieno baito (nes tipas unsigned char) perkelimas su automatiniu postinkrementu, o kad butu perkeliama is karto po kelis baitus, tai buferio tipas turi buti atatinkamai 16 ar daugiau bitu!
Pradėti naują temą  Atsakyti į pranešimą
 
Forumo sistema: phpBB
 „Google“ paieška forume
 Kas naujesnio?
 Naujos temos forume

Global electronic components distributor – Allicdata Electronics

Electronic component supply – „Eurodis Electronics“

LOKMITA – įvairi matavimo, testavimo, analizės ir litavimo produkcija

Full feature custom PCB prototype service

GENERAL FINANCING BANKAS

Mokslo festivalis „Erdvėlaivis Žemė

LTV.LT - lietuviškų tinklalapių vitrina

„Konstanta 42“

Technologijos.lt

Buitinė technika ir elektronika internetu žemos kainos – Zuza.lt

www.esaugumas.lt – apsaugok savo kompiuterį!

PriedaiMobiliems.lt – telefonų priedai ir aksesuarai

„Deinavos baldai“ — šeimos baldai

FS 22 Tractors
Farming Simulator 19 Mods, FS 22 Maps, FS22 Mods
ETS2 Mods
ETS2 Trucks, ETS2 Bus, Euro Truck Simulator 2 Mods
FS22 Tractors
Farming Simulator 22 Mods, FS22 Maps, FS22 Trucks
VAT calculator
VAT number check, What is VAT, How much is VAT
Paskola internetu
Vartojimo paskola, paskola automobiliui, paskola būsto remontui
Thermal monocular
Thermal vision camera,
Night vision ar scope,
Night vision spotting scope
FS22 Mods
FS22 Harvesters, FS22 Tractors Mods, FS22 Maps Mods
FS22 Mods
FS22 Maps,
FS22 Harvesters,
FS22 Tractors
Dantų protezavimas
All on 4 implantai,
Endodontija mikroskopu,
Dantų implantacija
Sims 4 Mods
Sims 4 CC Clothes,
Sims 4 Hair CC,
Sims 4 Skill Cheat
Optic sight
Binoculars for hunting elk,
Best compact binoculars,
Riflescope hunting
Reklama
‡ 1999– © Elektronika.lt | Autoriaus teisės | Privatumo politika | Atsakomybės ribojimas | Turinys | Reklama | Kontaktai LTV.LT - lietuviškų tinklalapių vitrina
Script hook v, Openiv, Menyoo
gta5mod.net
Farming Simulator 2019 Mods, FS22 Mods, FS22 Maps
farmingsimulator19mods.fr
Optical filters, UV optics, electro optical crystals
www.eksmaoptics.com
Reklamos paslaugos
SEO sprendimai

www.addad.lt
Elektroninių parduotuvių optimizavimas „Google“ paieškos sistemai
www.seospiders.lt
FS22 mods, Farming simulator 22 mods,
FS22 maps

fs22.com
Reklama


Reklama