PC C Compiler vs Arduino C Compiler

It’s been 2 days now that I’m enjoying this arduino thing (complete newbie on this electronics things), and found out that it has something like a ‘harddrive’ inside that can hold 1024 bytes. EEPROM. Well so I searched a little a found out that the arduino chip the ATMEL thing can be used on a protoboard and use it normally just by adding a couple more things. Also I found out that it has something call I2C for communicating with other electronics (I think), and separate EEPROM are sell online and use that I2C protocol thing.

Well this is where my problem started, I create an algorithm using C in some C compiler, CodeBloxx to be exact. I did the same algorithm on the Arduino and end up with almost exact results until it hit somewhere around the 200 counter. Then it just went crazy.

Can somebody explain me why?
Also I like to thanks the community that has treat me well. Thanx you guys! :slight_smile:

PC VERSION CODE

#include <stdio.h>
#include <conio.h>

int main (void){






    int resul[512];
    int c;
    int n;
    n = 0;
    c=0;

     if (n == 0)
     c = 1;
     printf("%d  %d\n",n,c);
     n= n+1;


    if (n == 1 )
    c = 1;
    printf("%d  %d\n",n,c);

   for (n=2;n<512;n++){
resul[n] = (n+2)*(n-1);
c=0;
if(resul[n]>255){
do {
  resul[n] = resul[n]+c-255;
  if (c<100)
  c=c+1;

} while (resul[n] > 255);

}
printf("%d   %d\n",n,resul[n]);
   }


    

return 0;



}

ARDUINO version

unsigned int addr = 0;
unsigned int val =0;
unsigned  int resul[512];


void setup()
{
  Serial.begin(9600);
  if (addr == 0)
    val = 1;
    Serial.print(addr);
      Serial.print("\t");
      Serial.print(val);
      Serial.println();

  delay(50);
  
  addr= addr+1;
  
  if (addr == 1 )
    val = 1;
    Serial.print(addr);
      Serial.print("\t");
      Serial.print(val);
      Serial.println();

    delay(50);
    
  for (addr=2; addr<512; addr++){
  resul[addr] = (addr+2)*(addr-1);
  val=0;
    if(resul[addr]>255){
      do {
          resul[addr] = resul[addr]+ val -255;
          if (val<100)
              val=val+1;

       } while (resul[addr] > 255);

      }
   
     Serial.print(addr);
      Serial.print("\t");
      Serial.print(resul[addr]);
      Serial.println();
      
      delay(50);
   }

   digitalWrite(13, HIGH);
}

void loop()
{}

OUTCOMES…

The problem is very likely because an int on the PC is 32 bits and an int on the Arduino is 16 bits.

OUTCOMES PC

[table][tr][td]PC OUTCOME    
0  1
1  1
2   4
3   10
4   18
5   28
6   40
7   54
8   70
9   88
10   108
11   130
12   154
13   180
14   208
15   238
16   15
17   49
18   85
19   123
20   163
21   205
22   249
23   41
24   89
25   139
26   191
27   245
28   48
29   106
30   166
31   228
32   40
33   106
34   174
35   244
36   65
37   139
38   215
39   43
40   123
41   205
42   40
43   126
44   214
45   56
46   148
47   242
48   91
49   189
50   43
51   145
52   249
53   110
54   218
55   84
56   196
57   67
58   183
59   59
60   179
61   60
62   184
63   70
64   198
65   89
66   221
67   117
68   253
69   154
70   58
71   200
72   109
73   255
74   169
75   86
76   238
77   160
78   85
79   243
80   173
81   106
82   42
83   208
84   149
85   93
86   40
87   214
88   166
89   121
90   79
91   40
92   224
93   190
94   159
95   131
96   106
97   84
98   65
99   49
100   249
101   238
102   230
103   225
104   223
105   224
106   228
107   235
108   245
109   54
110   71
111   91
112   114
113   140
114   169
115   201
116   236
117   79
118   121
119   166
120   214
121   75
122   130
123   188
124   249
125   128
126   196
127   85
128   160
129   238
130   141
131   226
132   139
133   231
134   154
135   253
136   186
137   125
138   235
139   184
140   139
141   100
142   225
143   196
144   173
145   153
146   135
147   119
148   105
149   248
150   238
151   230
152   224
153   220
154   218
155   218
156   220
157   224
158   230
159   238
160   248
161   105
162   119
163   135
164   153
165   173
166   195
167   219
168   245
169   118
170   148
171   180
172   214
173   250
174   133
175   173
176   215
177   104
178   150
179   198
180   248
181   145
182   199
183   255
184   158
185   218
186   125
187   189
188   255
189   168
190   238
191   155
192   229
193   150
194   228
195   153
196   235
197   164
198   250
199   183
200   118
201   210
202   149
203   245
204   188
205   133
206   235
207   184
208   135
209   243
210   198
211   155
212   114
213   230
214   193
215   158
216   125
217   249
218   220
219   193
220   168
221   145
222   124
223   105
224   243
225   228
226   215
227   204
228   195
229   188
230   183
231   180
232   179
233   180
234   183
235   188
236   195
237   204
238   215
239   228
240   243
241   105
242   124
243   145
244   168
245   193
246   220
247   249
248   125
249   158
250   193
251   230
252   114
253   155
254   198
255   243
256   135
257   184
258   235
259   133
260   188
261   245
262   149
263   210
264   118
265   183
266   250
267   164
268   235
269   153
270   228
271   150
272   229
273   155
274   238
275   168
276   255
277   189
278   125
279   218
280   158
281   255
282   199
283   145
284   248
285   198
286   150
287   104
288   215
289   173
290   133
291   250
292   214
293   180
294   148
295   118
296   245
297   219
298   195
299   173
300   153
301   135
302   119
303   105
304   248
305   238
306   230
307   224
308   220
309   218
310   218
311   220
312   224
313   230
314   238
315   248
316   105
317   119
318   135
319   153
320   173
321   195
322   219
323   245
324   118
325   148
326   180
327   214
328   250
329   133
330   173
331   215
332   104
333   150
334   198
335   248
336   145
337   199
338   255
339   158
340   218
341   125
342   189
343   255
344   168
345   238
346   155
347   229
348   150
349   228
350   153
351   235
352   164
353   250
354   183
355   118
356   210
357   149
358   245
359   188
360   133
361   235
362   184
363   135
364   243
365   198
366   155
367   114
368   230
369   193
370   158
371   125
372   249
373   220
374   193
375   168
376   145
377   124
378   105
379   243
380   228
381   215
382   204
383   195
384   188
385   183
386   180
387   179
388   180
389   183
390   188
391   195
392   204
393   215
394   228
395   243
396   105
397   124
398   145
399   168
400   193
401   220
402   249
403   125
404   158
405   193
406   230
407   114
408   155
409   198
410   243
411   135
412   184
413   235
414   133
415   188
416   245
417   149
418   210
419   118
420   183
421   250
422   164
423   235
424   153
425   228
426   150
427   229
428   155
429   238
430   168
431   255
432   189
433   125
434   218
435   158
436   255
437   199
438   145
439   248
440   198
441   150
442   104
443   215
444   173
445   133
446   250
447   214
448   180
449   148
450   118
451   245
452   219
453   195
454   173
455   153
456   135
457   119
458   105
459   248
460   238
461   230
462   224
463   220
464   218
465   218
466   220
467   224
468   230
469   238
470   248
471   105
472   119
473   135
474   153
475   173
476   195
477   219
478   245
479   118
480   148
481   180
482   214
483   250
484   133
485   173
486   215
487   104
488   150
489   198
490   248
491   145
492   199
493   255
494   158
495   218
496   125
497   189
498   255
499   168
500   238
501   155
502   229
503   150
504   228
505   153
506   235
507   164
508   250
509   183
510   118
511   210         
[td]ARDUINO OUTCOCOME
0      1
1      1
2      4
3      10
4      18
5      28
6      40
7      54
8      70
9      88
10      108
11      130
12      154
13      180
14      208
15      238
16      15
17      49
18      85
19      123
20      163
21      205
22      249
23      41
24      89
25      139
26      191
27      245
28      48
29      106
30      166
31      228
32      40
33      106
34      174
35      244
36      65
37      139
38      215
39      43
40      123
41      205
42      40
43      126
44      214
45      56
46      148
47      242
48      91
49      189
50      43
51      145
52      249
53      110
54      218
55      84
56      196
57      67
58      183
59      59
60      179
61      60
62      184
63      70
64      198
65      89
66      221
67      117
68      253
69      154
70      58
71      200
72      109
73      255
74      169
75      86
76      238
77      160
78      85
79      243
80      173
81      106
82      42
83      208
84      149
85      93
86      40
87      214
88      166
89      121
90      79
91      40
92      224
93      190
94      159
95      131
96      106
97      84
98      65
99      49
100      249
101      238
102      230
103      225
104      223
105      224
106      228
107      235
108      245
109      54
110      71
111      91
112      114
113      140
114      169
115      201
116      236
117      79
118      121
119      166
120      214
121      75
122      130
123      188
124      249
125      128
126      196
127      85
128      160
129      238
130      141
131      226
132      139
133      231
134      154
135      253
136      186
137      125
138      235
139      184
140      139
141      100
142      225
143      196
144      173
145      153
146      135
147      119
148      105
149      248
150      238
151      230
152      224
153      220
154      218
155      218
156      220
157      224
158      230
159      238
160      248
161      105
162      119
163      135
164      153
165      173
166      195
167      219
168      245
169      118
170      148
171      180
172      214
173      250
174      133
175      173
176      215
177      104
178      150
179      198
180      248
181      145
182      199
183      255
184      158
185      218
186      125
187      189
188      255
189      168
190      238
191      155
192      229
193      150
194      228
195      153
196      235
197      164
198      250
199      183
200      118
201      210
202      149
203      245
204      188
205      133
206      235
207      184
208      135
209      243
210      198
211      155
212      114
213      230
214      193
215      158
216      125
217      249
218      220
219      193
220      168
221      145
222      124
223      105
224      243
225      228
226      215
227      204
228      195
229      188
230      183
231      180
232      179
233      180
234      183
235      188
236      195
237      204
238      215
239      228
240      243
241      105
242      124
243      145
244      168
245      193
246      220
247      249
248      125
249      158
250      193
251      230
252      114
253      155
254      198
255      243
256      254
257      6
258      19
259      38
260      63
261      94
262      131
263      174
264      223
265      42
266      105
267      174
268      249
269      103
270      192
271      65
272      168
273      60
274      177
275      88
276      219
277      149
278      90
279      243
280      203
281      174
282      156
283      149
284      153
285      168
286      194
287      231
288      105
289      167
290      240
291      160
292      98
293      210
294      177
295      147
296      119
297      248
298      224
299      202
300      182
301      164
302      148
303      134
304      122
305      112
306      104
307      253
308      249
309      247
310      247
311      249
312      253
313      104
314      112
315      122
316      134
317      148
318      164
319      182
320      202
321      224
322      248
323      119
324      147
325      177
326      209
327      243
328      124
329      162
330      202
331      244
332      133
333      179
334      227
335      122
336      174
337      228
338      129
339      187
340      247
341      154
342      218
343      129
344      197
345      112
346      184
347      103
348      179
349      102
350      182
351      109
352      193
353      124
354      212
355      147
356      239
357      178
358      119
359      217
360      162
361      109
362      77
363      44
364      22
365      11
366      254
367      22
368      44
369      77
370      121
371      176
372      242
373      98
374      189
375      77
376      193
377      113
378      254
379      206
380      176
381      164
382      170
383      194
384      236
385      121
386      203
387      137
388      98
389      242
390      246
391      253
392      107
393      118
394      131
395      146
396      163
397      182
398      203
399      226
400      251
401      123
402      152
403      183
404      216
405      251
406      133
407      172
408      213
409      101
410      146
411      193
412      242
413      138
414      191
415      246
416      148
417      207
418      113
419      176
420      241
421      153
422      222
423      138
424      211
425      131
426      208
427      132
428      213
429      141
430      226
431      158
432      247
433      183
434      121
435      216
436      158
437      102
438      203
439      151
440      101
441      208
442      162
443      82
444      208
445      96
446      247
447      167
448      105
449      61
450      35
451      253
452      37
453      65
454      111
455      175
456      52
457      156
458      82
459      226
460      201
461      203
462      232
463      117
464      205
465      160
466      152
467      156
468      162
469      170
470      180
471      192
472      206
473      222
474      240
475      105
476      127
477      151
478      177
479      205
480      235
481      112
482      146
483      182
484      220
485      105
486      147
487      191
488      237
489      130
490      180
491      232
492      131
493      187
494      245
495      150
496      212
497      121
498      187
499      255
500      170
501      242
502      161
503      237
504      160
505      240
506      167
507      251
508      182
509      115
510      205
511      142
[/td][/td][/tr][/table]

Anything that contributes to this weirdness is gladly welcome.

PLEASE wrap that long list with a pair of code tags (the # button above the edit window; available when you click "Modify").

You don't say which Arduino you have.

unsigned  int resul[512];

That's 1024 bytes of memory. That's half the memory available on a 328 chip, and all the memory on a 168.

I have the Arduino Uno with the 328P chip. I know that I'am using 512, because I tried with 1024 and nothing happened. Can someone explain me how the 32 bit vs 16 bit could alter the results in this specific example?

Well in your Arduino example this line in the for loop:

resul[addr] = (addr+2)*(addr-1);

If addr = 255 the result is 65,278 but if addr = 256 the result is 65,790. The largest number that can be stored in an unsigned int on an Arduino is 65,535. If you change your unsigned int to unsigned long it should overcome this problem.

I tried that, changing to unsigned long, but the arduino won’t do anything because it will run out of SRAM somehow in any calculation. I think it is too much for the poor arduino lets hope that in the future we get an chip with 16KB SRAM AND 8KB EEPROM.

I also found out that you can send some information to the Atmega 328 Flash memory instead of sending it to the SRAM, but I will take a long process that I not willing to do, I’m lazy. Also it is too pro for me. :wink:

If someone finds another thing that could work out this thing, it will always be appreciated.

If someone finds another thing that could work out this thing, it will always be appreciated.

I suspect you will only get a response after you have told us what you are trying to accomplish. The Sketch you posted does not do any actual work.

Can I ask why you are using an array at all. I've just compiled the program without using an array and still get the same results (on a PC).

Well I'm trying to send the result numbers to the EEPROM to the 1024 slots. Like some kind of password. Thats why I try to make them smaller than 255.

2 Q: I don't know why I'm using arrays, I think you are right, I could have use plain variables instead and save some memory, sorry my bad.

Well presumably once you've removed the array variable and switched to unsigned longs you'll get the correct results.

I'm trying that, thank you very much. I don't know why was I using arrays. ;D