Diskuze: Deklarace proměnných
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 14 zpráv z 14.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.
První co vídím bez hlubšího zamyšlení:
extern uint8_t fill_tcp_data_p(uint8_t *buf,uint16_t pos, const uint8_t *progmem_s);
To je deklarace funkce -- předpokládám, že používáš nějakou kostru z
intrenetu? .)
Někde voláš tuto funkci se špatným druhým argumentem, proto:
expected 'const uint8_t *' but argument is of type 'char *'
Ano, máš pravdu, editace na fóru není nejlepší. Na druhou stranu můžeš příspěvek upravit po odeslání. Na jiném známém Unix/Linux serveru ho zase můžeš prohlédnou před odesláním, nikoliv však opravit.
Tak ten projekt je odtud http://mcu.cz/…t-n2898.html ten projekt je tady http://mcu.cz/…ether37b.zip to je hotový projekt a překládám ho v Atollic TrueSTUDIO for ARM Lite 5.2.1 nevíte jak to deklarovat dobře?díky za pomoc
Jestli jsem to pochopil dobře, tak to varování vzniká proto, že daná funkce očekává ve svém parametru hodnotu typu uint8_t *, ale ty ji předáváš char *. Jelikož na daném čipu bude char * určitě 8bitový (nevím, co říká norma C o možných velikostech tohoto typu), tak by toto varování pro výslednou binárku nemělo nic znamenat.
Dokonce bych řekl, že toho varování si jsou autoři projektu vědomi. U větších projektů se mi málokdy stalo, že by překlad proběhl bez jediného varování.
Není to obecně košér, ale zkus si při kompilaci vypnout varování,
které je brané jako chyba. Pokud bys kompiloval s GCC, pak když nastavíš
příznak -Werror
, pak všechny varování kompilátoru jsou brány
jako chyby. Pokud to vypneš, projde ti spousta věcí -- avšak i ty, které
není dobré podceňovat. Druhá možnost je zkusit parametr funkce přetypovat
na ukazatel na uint8_t
. Zřejmě někde tu proměnnou, kterou
dosazuješ musíš deklarovat sám, pak ji tedy rovnou deklaruj tak, jak to chce
kompilátor.
Typ uint8_t
je vždy 8 bitů, char
nemusí, i když
většinou bude.
V souboru simple_server.c
voláš tuto funkci a předáváš ji
řetězec jako ukazatel na char
jak jistě víš.například na
řádce 86:
"HTTP/1.0 200 OK\r\nContent-Type: text/html\r\n\r\n<h1>200 OK</h1>"
To jsem ten projekt nepsal já to jsem převzal už hotový projekt. Mě to taky zarazilo že tam cpe
string i když si možná pomyslíš že dělám machra když mě to teď
ukázal ale říkám že jsem nebyl "vychovávám v C" k mě veliké smůle
protože prajazyk pro všechno je C díky
Hodně zdaru, C je lehké v knize, těžké v projektu -- zkus si to přetypovat, mustr je zde:
char * message1 = "HTTP/1.0 200 OK\r\nContent-Type: text/html\r\n\r\n<h1>200 OK</h1>";
uint8_t * message2 = (uint8_t *) m1;
Pardon, m1
má být message1
-- nebo obráceně --
šotek .)
No jestli to nevadí ve výsledné funkcionalitě tak to předělávat nebudu a toto bych potřeboval vědět ve výsledné binárce mělo být na konci srozumitelný text v tomto případě jednoduchá webová stránka když jsem natáhl binárku pomocí ST-Linku tak jsem tam nic nenašel nebo je to nějak zakódované jako je to delphi v typu
record a:string;a:='hura'
d9ky
Většina triků s uintX_t
je kvůli přenositelnosti, protože
velikost základních typů je víceméně závislá na architektuře. Jestli to
není mission/safety critical/portable
projekt, tak bych se tím
netrápil.
není mission/safety critical/portableprojekt
co to je ?
To je trochu vtip .) Ale pro vysvělení:
Pokud potřebuješ, aby byl projekt portován na různé architektury, můžeš
vyžadovat typ, který má všude stejnou velikost, pak používáš
uintx_t
, Třeba při práci s grafikou -- úplně blízko železu
(hardware) -- tzv. low-level programování, mikročipy atd. Jak sem
psal, není potřeba se tím teď zaobírat, ale při programování věcí,
které nesmí havarovat -- spadnout -- tzv. kriticky bezpečné aplikace --
musíš znát přesně svoji cílovou architekturu, kompilátor a specifikaci
jazyka. Ani já neoplývám těmito znalostmi na takové úrovni, abych se do
něčeho takového pouštěl. Pokud máš zájem, podívej se na jazyk Ada a
něco kolem toho: http://www.adacore.com/…rs/about/ada
Zobrazeno 14 zpráv z 14.