Mikro C PIC - string - problém

"Ing. Libor Konečný" support na mikrovlny.cz
Úterý Leden 14 11:26:28 CET 2014


Nestandardni funkci mel kolega na mysli , ze ji napisete sam.

Tnz

BYTE pole[50];
BYTE pole2[50];

void funkce (BYTE *ukazatelnapole)
{
for (i=0; i<100; i++) *ukazatelnapole++=i;
}


Pri volani z main

funkce(&pole);    (& davam vzdy pro jistotu starsi kompilatory na 
ubicomu s tim mely problem)

se prepise i pole2 protoze v cyklu for se jede dle adresy promenne a 
kompilatoru nezna delku  pri pouziti ukazatelu.

Tak na to pozor, na mikrokontroleru to neni takova hruza, pod OS to muze 
byt znacne horsi.


LK


Dne 14.1.2014 10:48, Jan Půhoný napsal(a):
> A těmi nestandardními funkcemi, máte na mysli co? Je něco takového v 
> Mikro C PIC možné využít?
>
> H.
>
> Dne 14. ledna 2014 10:35 Martin Persich <persich na transcon.cz 
> <mailto:persich na transcon.cz>> napsal(a):
>
>     Pokud používáte standardní funkce "str...()", tak si bohužel délku
>     bufferů musíte v programu hlídat sám. A hodně důsledně! Stačí
>     chvilka nepozornosti a i po několika letech se objevují v programu
>     chyby... To je bohužel jeden z velkých nedostatků (a zárověň výhod
>     .-) ) jazykä "C".
>     Martin
>
>         ----- Original Message -----
>         *From:* Jan Půhoný <mailto:konference na puhy.cz>
>         *To:* HW-news <mailto:hw-list na list.hw.cz>
>         *Sent:* Tuesday, January 14, 2014 10:25 AM
>         *Subject:* Re: Mikro C PIC - string - problém
>
>         Díky moc - bylo to tou špatnou deklarací v druhém souboru,
>         proto mi to rozhazovalo displej a občas se to i kouslo.
>
>         Teď se to chová korektně.
>
>         Je tedy potřeba hlídat, aby délka toho bufferu byla vždy 16+1
>         znaků? Není na to nějaká funkce která by to zajistila?
>
>         Ještě jednou díky všem, nemohl jsem na to dlouho přijít.
>
>         Honza Půhoný
>
>
>         S pozdravem Ing. Jan Půhoný
>
>         www.puhy.cz <http://www.puhy.cz/>
>         puhy na puhy.cz <mailto:puhy na puhy.cz>
>
>         Navštivte nás na Facebooku:
>         http://www.facebook.com/puhy.cz
>
>         Následujte nás na Twitteru:
>         https://twitter.com/puhycz
>
>         Náš kanál na YouTube:
>         http://www.youtube.com/user/puhyeu
>
>         Připojení k internetu a VoIP telefonování
>         http://www.puhy.net
>
>
>         Dne 14. ledna 2014 10:01 Martin Persich <persich na transcon.cz
>         <mailto:persich na transcon.cz>> napsal(a):
>
>             V druhém souboru by měla být jen deklarace:
>             extern unsigned char prvni_r[];
>             extern unsigned char druhy_r[];
>             Počet prvků (délku bufferu) si musí program v "C" bohužel
>             hlídat sám, není problém téměř cokoliv, kdekoliv přepsat
>             mimo tento buffer ... :-(
>             Jinak ten uvedený zápis jednotlivých prvků do bufferu v
>             druhém souboru je dle mého v pořádku a v rámci možností
>             (tj. jazyka "C") korektní.
>             Martin. persich na transcon.cz <mailto:persich na transcon.cz>
>
>                 ----- Original Message -----
>                 *From:* Jan Půhoný <mailto:konference na puhy.cz>
>                 *To:* HW-news <mailto:hw-list na list.hw.cz>
>                 *Sent:* Tuesday, January 14, 2014 9:37 AM
>                 *Subject:* Re: Mikro C PIC - string - problém
>
>                 Díky všem za odpovědi.
>
>                 Zdá se, te strcpy funguje stejně jak s & tak bez &.
>                 Ještě to ale trochu zlobí, když do prvni_r a druhy_r
>                 šahám přes takovýto zápis
>
>                 extern unsigned char prvni_r[17]="  ";
>                 extern unsigned char druhy_r[17]="  ";
>
>                 prvni_r[8]=jednotky;
>                 prvni_r[9]=desitky;
>                 prvni_r[10]=':';
>
>                 z jiného c souboru stejného projektu.
>
>                 V hlavním c souboru s main void mám definici takto:
>
>                 unsigned char prvni_r[17]="                ";
>                 unsigned char druhy_r[17]="                ";
>
>                 Jak korektně přistupovat ke stejným proměnným z
>                 různých c souborů projektu?
>
>                 Díky.
>
>                 Honza Půhoný
>
>
>
>                 Dne 13. ledna 2014 22:13 Martin Persich
>                 <persich na transcon.cz <mailto:persich na transcon.cz>>
>                 napsal(a):
>
>                     A ještě jeden postřeh. Pokud se jedná o buffer pro
>                     16-ti znakový LCD displej, tak pro použití funkce
>                     "strcpy()" je nezbytné, aby tento buffer měl délku
>                     17 znaků (pro uložení ukončující "nuly" - '\0' ).
>                     Jinak dojde k nedefinovanému přepsání
>                     "následující" proměnné.
>                     Martin. persich na transcon.cz
>                     <mailto:persich na transcon.cz>
>
>                         ----- Original Message -----
>                         *From:* Aleš Novák <mailto:alesh.novak na email.cz>
>                         *To:* HW-news <mailto:hw-list na list.hw.cz>
>                         *Sent:* Monday, January 13, 2014 9:32 PM
>                         *Subject:* Re: Mikro C PIC - string - problém
>
>                         Nemelo by to byt spise takhle:
>                         stcrpy(prvni_r,"testovaci napis");
>
>                         Jmeno pole je samo o sobe pointer na jeho
>                         prvni polozku.
>
>                         Ales
>
>
>                         13. ledna 2014, 20:31:59, napsal jste:
>
>
>                         	Zkuste stcrpy(&prvni_r,"testovaci napis");
>
>
>
>                         LK
>
>
>                         Dne 13.1.2014 19:53, Jan Půhoný napsal(a):
>                         Zdravím konferenci,
>
>                         mám tady takový lama problém v C (Mikro C pro
>                         PIC řady 16).
>
>                         V proměnné prvni_r mám znaky pro první řádek
>                         LCD displeje (pak to vypisuji přes
>                         Lcd_Out(1,1prvni_r); - to funguje.
>
>                         //definice
>
>                         unsigned char prvni_r[16];
>
>                         //editace znaků
>
>                         prvni_r[5] = 223;
>                         prvni_r[6] = 'C';
>                         prvni_r[7] ='  ';
>
>                         Lcd_Out(1,1prvni_r); //na pozici 5,6,7 mi to
>                         vypíše °C
>                         to funguje ok
>
>                         Proč ale nefunguje toto:
>
>                         prvni_r="testovaci napis";
>
>                         na tomto řádku to hází error: Assigning to
>                         non-lvalue
>
>                         Co s tím, abych tam mohl dávat jak celé
>                         řetězce a zároveň editovat jednotlivé znaky?
>
>                         Díky,
>
>                         Honza Půhoný
>
>
>                         _______________________________________________
>                         HW-list mailing list  -  sponsored by
>                         www.HW.cz <http://www.HW.cz>
>                         Hw-list na list.hw.cz <mailto:Hw-list na list.hw.cz>
>                         http://list.hw.cz/mailman/listinfo/hw-list
>
>
>
>
>
>                         /
>                         -- 
>                         S pozdravem,
>                          Aleš
>                         alesh.novak na email.cz
>                         <mailto:alesh.novak na email.cz>
>                         ------------------------------------------------------------------------
>                         /
>
>
>
>
>
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list

------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20140114/177c5b68/attachment.html>


Další informace o konferenci Hw-list