Hallo zusammen habe wie oben gesagt ein Problem mit der scanf_s. Ich möchte die CRC16 für eine Modbuscom berechnen. Wenn ich die Werte fest vergebe ist das auch kein Problem. Nur wenn ich sie über scanf_s einlese, bekomme ich fehler in der Berechnung. Bzw ein Array wird nicht mit Daten gefüllt. Jemand ne Idee? Anbei der Code
1 | #include <stdio.h> |
2 | |
3 | // Berechnung CRC16
|
4 | // ----------------
|
5 | unsigned int CRC16(unsigned int crc, unsigned int data) |
6 | {
|
7 | const unsigned int Poly16=0xA001; //Generatorpolynom |
8 | unsigned int LSB, i; |
9 | crc = ((crc^data) | 0xFF00) & (crc | 0x00FF); |
10 | for (i=0; i<8; i++) |
11 | {
|
12 | LSB=(crc & 0x0001); |
13 | crc=crc/2; |
14 | if (LSB) |
15 | crc=crc^Poly16; |
16 | }
|
17 | return(crc); |
18 | }
|
19 | |
20 | int main() |
21 | {
|
22 | |
23 | /*unsigned*/ char NumData; |
24 | /*unsigned*/ char InputByte; |
25 | /*unsigned*/ char i,data[255]/*={01,43,14,01,00}*/; // Telegrammbuffer |
26 | unsigned char Crc_HByte,Crc_LByte; // |
27 | unsigned int Crc; |
28 | |
29 | /*Einlesen des Wortes Problemzone*/
|
30 | printf("Anzahl der Bytes: "); |
31 | scanf_s("%d",&NumData); |
32 | printf("Anzahl der Bytes = %d\n",NumData); |
33 | |
34 | for (i=0; i<NumData;i++) |
35 | {
|
36 | printf("Wert Byte:" ); |
37 | scanf_s("%d",&InputByte); |
38 | data[i]= InputByte; |
39 | }
|
40 | printf("Wert data: %d\n %d\n %d\n %d\n %d\n" ,data[0],data[1],data[2],data[3],data[4]); |
41 | |
42 | /*keine Probleme*/
|
43 | Crc=0xFFFF; |
44 | for (i=0; i<NumData; i++) |
45 | {
|
46 | Crc = CRC16 (Crc, data[i] ); |
47 | }
|
48 | Crc_LByte = (Crc & 0x00FF); // Low-Byte bestimmen |
49 | Crc_HByte = (Crc & 0xFF00) / 256; // High-Byte bestimmen |
50 | |
51 | printf("LByte %d\n",Crc_LByte); |
52 | printf("HByte %d\n",Crc_HByte); |
53 | while (1) |
54 | {;
|
55 | ;}
|
56 | }
|
Alles auf der Basis von Visual c++ 2005.