Elektronika.lt
 2025 m. spalio 15 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 2025 10 15, 00:17. Visos datos yra GMT + 2 valandos.
 Forumas » Mikrovaldikliai » Uart ir C const stringai
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ą 
 Uart ir C const stringai
PranešimasParašytas: 2006 04 26, 10:54 Pranešti apie taisyklių pažeidimą Atsakyti su citata
jack
Dažnas dalyvis
Dažnas dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Yra toks fragmentas kad pastovius stringus isvedineti tiesiai is programos atminties, nekraunant i ram'a. Naudojama uart_puts_P("Tekstas");
Noriu pasitikslint ar teisingai suprantu kas vyksta Smile
Kodas:

// beabejo cia tik esminiai fragmentai, ne pilni failai
// uart.h
#ifndef P
#define P(s) ({static const char c[] __attribute__ ((progmem)) = s;c;})
#endif   // P

#define uart_puts_P(__s)       uart_puts_p(P(__s))

void uart_puts_p(const char *progmem_s );

// uart.c
void uart_puts_p(const char *progmem_s )
{
    register char c;   
    while ( (c = pgm_read_byte(progmem_s++)) )
      uart_putc(c);
}

Tai uart_puts_P makrosas reikalingas kad nerasyti kaskart uart_puts_p(P("Tekstas")); ?
O P makrosas grazina pointeri i ta vieta kur flash'e yra stringas?
P makroso gale yra c; Kokia jo paskirtis? cia yra kaip return c; is funkcijos?
 Uart ir C const stringai
PranešimasParašytas: 2006 05 02, 17:36 Pranešti apie taisyklių pažeidimą Atsakyti su citata
oni
Užkietėjęs dalyvis
Užkietėjęs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Nors C++ nėra mano arkliukas, bet 'c' - tai lyg ir char tipo kintamasis, o funkcijoje paprasčiausiai nuskaito nuo perduotos nuorodos po tą patį vieną baitą ir jį meta į uartą.
 Uart ir C const stringai
PranešimasParašytas: 2006 05 02, 20:25 Pranešti apie taisyklių pažeidimą Atsakyti su citata
CodeC
Patyręs dalyvis
Patyręs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą Siųsti el. laišką
turi atminties celes adresa flashe - jame stringas. turi UART tx registro adresa. kad irasyt duomenis is pirmojo i antra ju det i rama nereikia. ir jokiu makrosu nereikia. isvis, programuojant mikrovaldiklius visi maksosai ir kitos c++ bezobrazijos yra blogis.
 Uart ir C const stringai
PranešimasParašytas: 2006 05 04, 17:53 Pranešti apie taisyklių pažeidimą Atsakyti su citata
jack
Dažnas dalyvis
Dažnas dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Makrosai yra naudojami C, C++ ju jau nelabai ir reikia.
O kodel makrosai mikrovaldikliams yra blogis? Juk siaip jei nera kompiliuojami, o kompiliatorius juos pakeicia pacio makroso kodu, nu bent taip yra ant pc. Nors per daug su jais isijautus galima prisizaisti ir paskui nerasti problemu pradzios.

Mikrovaldikliu programinime as zalias. Gal zinot kur yra koksnors pavyzdys su CodeC aprasytu budu?
Nes visur kur randu yra paprasti pavyzdziai su kazkuo panasiu i
Kodas:

void uart_putc(unsigned char c) {
      while(!(UCSRA & (1 << UDRE)));   // wait until UDR ready
   UDR = c;                    // send character
}

// sends string over UART
void uart_puts (char *s) {
   while (*s)
   {
      uart_putc(*s);
      s++;
   }
}

Dinaminiams stringams (nors C istikro tokio tipo kaip stringas nera, o yra dirbtiniai stringai - char masyvas kuris baigiasi 0, juos ir vadinu stringais) tai tinka. Bet jei daryti uart_puts("Tekstas"); tai Tekstas pakraunamas i ram'a su visais is to isplaukianciais blogumais.
O kad nekrautu i ram'a pavyko rasti toki buda, kur pirmoj zinutej rasiau.
 Uart ir C const stringai
PranešimasParašytas: 2006 05 04, 21:44 Pranešti apie taisyklių pažeidimą Atsakyti su citata
CodeC
Patyręs dalyvis
Patyręs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą Siųsti el. laišką
turbut esi PC programeris, bent jau taip sprendziu pagal mastyma Smile su mikrovaldikliais truputi kitaip nei su PC - cia reikai tiksliai zinot ka ir is kur paimi ir kur padedi. PC apie hardvara prakstiskai galvot nereikia. makrosai ir optimizacija gerai kai resursu daug ir dzin ar plius pora kilobaitu ar minus.
jei tau reikia isvedineti kazkokias konstantas i UART'a, tai as isvis nesuprantu, ka cia taip sudetingai darai. tereikia sukonfiginti UART ir poto jau visas stringo padejimas - viena eilute.
kad pc programeris sprendziu ir is to, kad net neparasiai koks mikrovaldiklis:) cia TAI svarbu.
 Uart ir C const stringai
PranešimasParašytas: 2006 05 05, 10:50 Pranešti apie taisyklių pažeidimą Atsakyti su citata
jack
Dažnas dalyvis
Dažnas dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Smile mikrovaldiklis ATmega16, UART normaliai sukonfigintas ir veikia
Isties ten turbut su makrosais persistengta, tai pasiieskojes suradau dar viena to pacio principo realizacija:
Kodas:
void uart_writepgm(const char *str )
{
    register uint8_t chr;
    while ( (chr = pgm_read_byte(str++)) )
      uart_putc(chr);
}

is http://www.elektronik-projekt.de/wiki2/index.php/AVR_USART_Library
Kolkas neisbandziau bet manau turetu veikti. Cia lygtai tas pats kas ir pirmu atveju tik paprasciau: perduodam pointeri (adresa) ir skaitom tuo adresu is flasho ir metam i UART, kol nenuskaitom 0.
 Uart ir C const stringai
PranešimasParašytas: 2006 05 05, 12:06 Pranešti apie taisyklių pažeidimą Atsakyti su citata
CodeC
Patyręs dalyvis
Patyręs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą Siųsti el. laišką
vistiek tas uart_puts () naudojamas nesuprasi kam. atn avr dabar jau nelabai pamenu, bet 90 proc kad irasymas i uart atrodo panasiai:

unsigned char masyvas [x] = { x,x,x,x,....,x }
unsigned char index;

for (index=0; index < sizeof (masyvas); index++) {UARTTX = masyvas [index] }

visas vargas. del registru tiksliu mnemoniku ziureti kompiliatoriaus includus.

tiesa, jeigu masyvas ne rame o flashe tai jo priskyrimas turetu but conts unsigned char. dideliu masyvu flashe kartais nepatartina laikyt, nes gali kilt problemu inicializacijos metu. kazkur jau rasiau kaip buna su MSP430 procais.
 Uart ir C const stringai
PranešimasParašytas: 2006 05 06, 22:25 Pranešti apie taisyklių pažeidimą Atsakyti su citata
jack
Dažnas dalyvis
Dažnas dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
uart_puts() arba uart_writepgm() pagal paskutini mano koda, reikalingas tam, kad nereiktu aprasyneti masyvu ir kisti stringus iskart i proceduros kvietima (uart_writepgm("tekstas"); ) Beabejo ziurint kokie tu konstantiniu stringu mastai, jei nedaug tai tavo budas geresnis ir greitesnis (nes vykdant nera proceduros kvietimu ir grizimu is jos) Bet jei noret atskirti visa uart funkcionaluma i atskira bloka ir naudoti daug skirtingu statiniu stringu ar iskart neaisku kiek ir kokiu ju tures buti, tai mano rasti budai man atrodo patogesni. Nu gal cia tik man tai atrodo nes priprates prie printf(..) ir panasiu ant pc C Smile
Tai vienu atveju bus masyvu aprasai ir kodo kartojimasis (jei nedet i procedura), o kitu - papildomi suoliai i procedura ir atgal
 Uart ir C const stringai
PranešimasParašytas: 2006 05 06, 23:54 Pranešti apie taisyklių pažeidimą Atsakyti su citata
CodeC
Patyręs dalyvis
Patyręs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą Siųsti el. laišką
tam dabar ir gaminami mikrovaldikliai su daug flash atminties, kad nereiketu aukot programos optimalumo taupant atminti. dar neteko matyt programos kuri butu 60 KB ir daugiau... pats buvau parases 8 KB. ir tai - jau nebeina is karto atsimint ka kuri paprograme daro:)
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

Sveiki ir ekologiški maisto produktai

Mokslo festivalis „Erdvėlaivis Žemė

LTV.LT - lietuviškų tinklalapių vitrina

„Konstanta 42“

„Mokslo sriuba“

www.matuok.lt - Interneto spartos matavimo sistema

Programuotojas Tautvydas – interneto svetainių-sistemų kūrimas

PriedaiMobiliems.lt – telefonų priedai ir aksesuarai

Draugiškas internetas

FS25 Tractors
Farming Simulator 25 Mods, FS25 Maps, FS25 Trucks
ETS2 Mods
ETS2 Trucks, ETS2 Bus, Euro Truck Simulator 2 Mods
FS22 Tractors
Farming Simulator 22 Mods, FS22 Maps, FS25 Mods
VAT calculator
VAT number check, What is VAT, How much is VAT
Dantų protezavimas
All on 4 implantai,
Endodontija mikroskopu,
Dantų implantacija
FS25 Mods
FS25 Maps, FS25 Cheats, FS25 Install Mods
FS25 Mods
Farming Simulator 25 Mods,
FS25 Maps
ATS Trailers
American Truck Simulator Mods, ATS Trucks, ATS Maps
Reklama
‡ 1999– © Elektronika.lt | Autoriaus teisės | Privatumo politika | Atsakomybės ribojimas | Turinys | Reklama | Kontaktai LTV.LT - lietuviškų tinklalapių vitrina
Ets2 mods, Ats mods, Beamng drive mods
allmods.net
„MokslasPlius“ – mokslui skirtų svetainių portalas
www.mokslasplius.lt
Optical filters, UV optics, electro optical crystals
www.eksmaoptics.com
LTV.LT – lietuviškų tinklalapių vitrina
www.ltv.lt/technologijos/
Elektroninių parduotuvių optimizavimas „Google“ paieškos sistemai
www.seospiders.lt
Mokslo festivalis „Erdvėlaivis žemė“
www.mokslofestivalis.eu
Reklama


Reklama