Kezdőoldal » Számítástechnika » Programozás » < C > IntelHex, Checksum...

< C > IntelHex, Checksum program segítség?

Figyelt kérdés

A feladat a köv.:


Irjon programot ami kiszámítja a kontrol összeget (checksum) megadott sorra ún. IntelHex fájl.


Definício: Kontrol összeg, ugy szamolja ki ,mint "kettes" /ket darab szam osszege/ osszeg egyes bajtoknak a sor elejetola a kontrol osszegig a.


Pelda:

Ha a kov. sor adott:


:10010000214601360121470136007EFE09D21901XX


Ki kell jonni az XX helyere a kontrol osszegnek 40 -re.


Demonstralja ezeken a pl sorokon:


:100010000C9445000C9445000C9445000C944500xx

:100020000C9445000C9445000C9445000C944500xx

:100030000C9445000C9445000C9445000C944500xx

:100040000C9445000C9445000C9445000C944500xx


[link]


Hogy oldanatok meg ?

Vegig kell menni a kettesevel a tombon es osszeadni ezeket, sscanf(tomb,"%2x",&sum); vegig megyek majd hexa formatba olvasom be ?! de ezutan mar nem tudom...mit kene


2012. márc. 4. 09:56
 1/2 A kérdező kommentje:

itt egy megoldasa:



#include <stdio.h>


void bin(int sum);

int main()

{

char s[]="100040000C9445000C9445000C9445000C944500";

int i,j,d,sum=1;


sscanf(s,"%2x",&d);

for(i=0;i!=(d*2+8);i+=2)

{

sscanf((s+i),"%2x",&j);

sum+=j;



sum=(((sum/256)+1)*256)-sum;

printf("Checksum Intel hex kodu\n:%sxx\nje rovny %x\n",s,sum);



getchar();

return 0;

}



>>>>>>>>>>>>>>>>>>>> sum=(((sum/256)+1)*256)-sum;


ezt a reszt nem ertem..hogy miert hogyan

2012. márc. 4. 11:41
 2/2 A kérdező kommentje:

most mar nekem is kijott a 40.


#include <stdio.h>


int main()

{

char tomb[]=":10010000214601360121470136007EFE09D2190140";

int sum = 0,length,i,val;


sscanf(tomb+1,"%2x",&length);

for(i = 0; i<length+4;i++)

{

sscanf(tomb+2*i+1,"%2x", &val);

sum += val;

printf("%x\n",sum);


}

printf("\n\n%x", sum);



sum &= 0xFF;

sum = 0x100 - sum;

sum &= 0xFF;

printf("\nChecksum Intel hex kodu\ %x\n",sum);


getchar();

return 0;

}


Kerdezhetnek meg par dolgot ..:


1.) sscanf(tomb+1,"%2x",&length); itt a 2x 2drb karakterenkent megy vegig a tombon es igy adja meg a length osszeget ? igy egy 10 karakteres tomb 5 lessz az erteke,ezt gondoltam ,de kirpobaltam ezt:

char tomb2[]="12345678";

sscanf(tomb2,"%2x",&length2);

es 18 at adott eredmenyul.


2.)


for(i = 0; i<length+4;i++)

a + 4 bajt ami ide kerul az osszegbe az micsoda? az lessz a checksum erteke?


3.)

sscanf(tomb+2*i+1,"%2x", &val);

ez tomb+2*i+1 a resz total sotet,talan azt tippelem h a +2 azert kell hogy a : ot kikeruljuk *i+1 nem tudom mire lehet..


5.)


sum &= 0xFF;

sum = 0x100 - sum;

sum &= 0xFF;


ez ugye a wikin levo algoritmus:

az összes mező 2-es komplemensben vett összegének/

ez ugye a sum

/ - kivéve az 1. és 6. - LSB-je. Számítása úgy történik, hogy összeadjuk a hexadecimálisan megadott bájtokat, majd az összegnek vesszük az LSB-jét (Least Significant Byte - Legkisebb értékű bájt), és ezt vagy kivonjuk 0x100-ból vagy invertáljuk (XOR 0xFF-fel) és hozzáadunk 1-et (ez lényegében az LSB 2-es komplemensének előállítása). Ezután a végeredményt AND-eljük 255-tel mivel 0x100-0 és (0x00 XOR 0xFF)+1 is egyenlő 0x100-zal,/

ez a rész nem tudom hol van

/ és ha nem 8 bites változókkal dolgozunk, akkor az overflow-t (túlcsordulást) el kell hagyni. Ha az ellenőrzőösszeg megfelelően van kiszámítva, akkor soronként minden egyes bájtot összeadva (a Bájtok számát, a Cím mindkét bájtját, a Rekord típust, minden Adat bájtot és az Ellenőrző összeget), akkor a végeredmény LSB-jének értéke 0x00 kell, hogy legyen.

2012. márc. 4. 17:24

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!