[C] záhada

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Zpráva
Autor
Jenda_KL
Příspěvky: 1173
Registrován: 10 zář 2008, 02:00
Bydliště: Kadaň
Kontaktovat uživatele:

#16 Příspěvek od Jenda_KL »

Je to čtečka čárovejch kódů a co v tom je za procesor nevím, linker a kompilátor je od tošiby.
Vůbec nevím proč, nikdy by mě nenapadlo přetypovač použít, ale s ním to funguje.

Kód: Vybrat vše

sprintf(mg,"TDSver: %d Prog:\"%s\"\n\r",(int)ver,msg);
Nejvíc mě na tom drtí, že celou aplikaci jsem napsal a odladil s gcc během dvou dnů a teď 2 týdny řešim při portu tyhle blbosti. Nefunguje tu ani memset() ačkoli se tváří že ano!

Uživatelský avatar
piitr
Příspěvky: 1003
Registrován: 19 říj 2007, 02:00
Kontaktovat uživatele:

#17 Příspěvek od piitr »

Jenda_KL píše:Vůbec nevím proč, nikdy by mě nenapadlo přetypovač použít, ale s ním to funguje.
A jak je definováno to ver?

Jenda_KL
Příspěvky: 1173
Registrován: 10 zář 2008, 02:00
Bydliště: Kadaň
Kontaktovat uživatele:

#18 Příspěvek od Jenda_KL »

Je definován jako Unsigned int.
Pokud je zobrazeno více ints s formátovačem %d zasebou, tak to funguje.
Rovněž více stringů funguje.
Nefunguje kombinace %d %s, respektive funguje s přetypovačem u %d.

Uživatelský avatar
piitr
Příspěvky: 1003
Registrován: 19 říj 2007, 02:00
Kontaktovat uživatele:

#19 Příspěvek od piitr »

Hmm, tak to by mělo být v pořádku. Mně to připadá jako chyba překladače. Nebo je tam někde schovaný nějaký zlý #define nebo tak něco.

Uživatelský avatar
piitr
Příspěvky: 1003
Registrován: 19 říj 2007, 02:00
Kontaktovat uživatele:

#20 Příspěvek od piitr »

Taky je otázka, pokud je to Unsigned opravdu s velkým U, co to vlastně znamená. Normální C to nezná. Klidně to může být definováno jako unsigned long.

Jenda_KL
Příspěvky: 1173
Registrován: 10 zář 2008, 02:00
Bydliště: Kadaň
Kontaktovat uživatele:

#21 Příspěvek od Jenda_KL »

jasně, je to "unsigned int".
v gcc pod linuxem se ta aplikace normálně přeloží, spustí a funguje.
Bude to chyba překladače.

Uživatelský avatar
AB1
Příspěvky: 312
Registrován: 23 lis 2009, 01:00

#22 Příspěvek od AB1 »

A jak je definováno to ver?
Je definován jako Unsigned int.
Potom v printf() má být %u místo %d.

%d je pro celá čísla "signed"
%u pro celá čísla "unsigned"

Tady to snad nevadí, ale %d nebude správně zobrazovat unsigned int větší než 32768.

Uživatelský avatar
Panda38
Příspěvky: 713
Registrován: 21 lis 2012, 01:00
Bydliště: Most, Praha, Lanžhot
Kontaktovat uživatele:

#23 Příspěvek od Panda38 »

Moc se mi nezdá že by v gcc pro Windows mohla být taková chyba, a ani si neumím představit, co by taková aplikace musela udělat, aby nahodila BSOD. To by chtělo podívat co hlásí BSOD za chybu. A zkusit program na jiném počítači, myslím že to bude počítačem a ne programem. Vadný harddisk (chyba dat při swapování paměti), vadná RAM, chyba v driveru videokarty atd.
Naposledy upravil(a) Panda38 dne 17 pro 2012, 18:30, celkem upraveno 1 x.

Andrea
Příspěvky: 9340
Registrován: 07 zář 2007, 02:00

#24 Příspěvek od Andrea »

BDOS, to je něco z CP/M, ne? :D
Mně se před pár dny podařilo natvrdo zresetovat PC s WinXP jen tím, že jsem při enumeraci na USB vrátila chybnou délku v hlavičce konfiguračního deskriptoru. Prostě jednočip na USB poslal 34h místo 66h a PC se bez jakékoliv hlášky zresetovalo. To jen tak na okraj k té stabilitě windows. :)

Uživatelský avatar
Panda38
Příspěvky: 713
Registrován: 21 lis 2012, 01:00
Bydliště: Most, Praha, Lanžhot
Kontaktovat uživatele:

#25 Příspěvek od Panda38 »

Mně to připadlo nějaké divné když jsem to psal. :D Jo jo, BDOS+BIOS+CCP = CP/M. Ale třeba se to také chytne, "blue death of screen". ;-)

Když driver shodí Windows, to je celkem ještě v pořádku, driver má přístup do kernelu, ale aplikace ne. I když nevím koho z MS napadlo při chybě služby resetovat PC bez varování, málokdo ví že si to může vypnout. Ale oni tam mají různé veselé nápady, jako např. po aktualizaci systému bez varování resetovat systém, člověk pak kouká že má několik hodin neuložené práce v ... pryč.

Jenda_KL
Příspěvky: 1173
Registrován: 10 zář 2008, 02:00
Bydliště: Kadaň
Kontaktovat uživatele:

#26 Příspěvek od Jenda_KL »

Panda38 píše: po aktualizaci systému bez varování resetovat systém, člověk pak kouká...
Tenhle nápad je nejskvělejší. To se dá taky vypnout, ale to uděláš až po prvním resetu ))

Uživatelský avatar
Panda38
Příspěvky: 713
Registrován: 21 lis 2012, 01:00
Bydliště: Most, Praha, Lanžhot
Kontaktovat uživatele:

#27 Příspěvek od Panda38 »

"Naštěstí" jsou tyhle vypínače v každém systému úplně jinde, aby je uživatel neměl šanci tak snadno najít a náhodou jej nenapadlo si je vypnout.

Uživatelský avatar
RayeR
Příspěvky: 1167
Registrován: 02 srp 2009, 02:00
Bydliště: Praha
Kontaktovat uživatele:

#28 Příspěvek od RayeR »

Andrea píše: Mně se před pár dny podařilo natvrdo zresetovat PC s WinXP jen tím, že jsem při enumeraci na USB vrátila chybnou délku v hlavičce konfiguračního deskriptoru.:)
Jo to verim, taky sem podobne shodil XP SP3 do BSOdu. Ale to je chyba zabugovanyho driveru usbser.sys (teda aspon v mem pripade, slo o USB emulijici seriak). Jelikoz ve windows bezi drivery na stejnym CPL jako kernel (narozdil treba od OS/2) tak neni problem pro driver zborit cely pocitac. Proto taky mrdkosoft chce po vyrobcich hw certifikaci driveru WHQL, ale sam si svoje bugy opravit neumi :D

Jinak k puvodnimu tematu, to vidim na chybu prekladace. Slusne vychovany prekladac se takle rozhodne nechova. Pokud nesouhlasi delka promenne a formatovaci retezec tak vypise warning (doufam ze dotycny ma zapnute warningy)

Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“