 |

|
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
|
|
|
 |
 |
Uart ir C const stringai |
Parašytas: 2006 04 26, 10:54 |
|
|
|
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
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 |
Parašytas: 2006 05 02, 17:36 |
|
|
|
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 |
Parašytas: 2006 05 02, 20:25 |
|
|
|
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 |
Parašytas: 2006 05 04, 17:53 |
|
|
|
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 |
Parašytas: 2006 05 04, 21:44 |
|
|
|
turbut esi PC programeris, bent jau taip sprendziu pagal mastyma 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 |
Parašytas: 2006 05 05, 10:50 |
|
|
|
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 |
Parašytas: 2006 05 05, 12:06 |
|
|
|
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 |
Parašytas: 2006 05 06, 22:25 |
|
|
|
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
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 |
Parašytas: 2006 05 06, 23:54 |
|
|
|
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:) |
|
|
|
|
|
 |
Google paieška forume |
|
 |
Naujos temos forume |
|
 |
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 |
|

|
 |