Stránka 2 z 2

Napsal: 17 pro 2012, 12:35
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!

Napsal: 17 pro 2012, 13:05
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?

Napsal: 17 pro 2012, 15:28
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.

Napsal: 17 pro 2012, 16:00
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.

Napsal: 17 pro 2012, 16:04
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.

Napsal: 17 pro 2012, 16:19
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.

Napsal: 17 pro 2012, 16:41
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.

Napsal: 17 pro 2012, 17:59
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.

Napsal: 17 pro 2012, 18:08
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. :)

Napsal: 17 pro 2012, 18:29
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č.

Napsal: 18 pro 2012, 10:24
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 ))

Napsal: 18 pro 2012, 11:09
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.

Napsal: 22 pro 2012, 01:36
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)