Bascom VS IDE-Arduino - chi vince?

Sezione dedicata al sistema di sviluppo BASCOM-AVR per i micro AVR
At90s, Attiny, Atmega e Xmega

Bascom VS IDE-Arduino - chi vince?

Postby filosofo » 11 Sep 2012, 18:43

scusate,
ho trovato molti esempi di codici molto semplici che fanno la stessa cosa scritti con ide-arduino e con bascom-avr.
non è per fare cattiva pubblicità all'ide di ardu, ma confrontando di persona e compilando i codici mi sono accorto che quelli scritti con ide-ardu occupano almeno 3 volte lo spazio che occupano quelli in bascom, quindi secondo meno performanti e più lenti.
ho provato molti codici.... questa cosa risulta anche a voi?
da cosa dipende? è vero che bascom è molto potente allora?

I due sorgenti sotto riportati eseguono 10 letture con l'adc e poi eseguono la media e la spediscono sulla seriale.

Versione arduino (2590 byte)
Code: Select all
#define NUMREADINGS 10
int readings[NUMREADINGS];
 int index = 0;
 int total = 0;
 int average = 0;
int inputPin = 0;
void setup()
 {
   Serial.begin(9600);
   for (int i = 0; i < NUMREADINGS; i++)
     readings[i] = 0;
 }

 
void loop()
 {
   total-=readings[index];
   readings[index] = analogRead(inputPin);
   total+= readings[index];
   index =(index + 1);
  if(index >= NUMREADINGS)
     index = 0;
  average = total / NUMREADINGS;
   Serial.println(average);
 }


versione bascom (890 byte)
Code: Select all
$regfile "m328pdef.dat"
$include "DuinoLib.inc"
$crystal = 16000000
$external Anaread
$baud = 9600
$noramclear

Dim Index As Byte , Value As Word , Total As Word , Average As Word
Dim Readings(10) As Word
Const Numreadings = 10

Index = 1                                             
'-------------------------------------------------------------------------------
Do

   Total = Total - Readings(index)
   Anaread Adc5 , Value
   Readings(index) = Value
   Total = Total + Value
   Incr Index
   If Index > Numreadings Then Index = 1
   Average = Total / Numreadings
   Print Average                                           

Loop

End


'890 byte di bascom contro i 2590 byte di IDE-arduino (ma sto sognando?)
filosofo
 
Posts: 74
Joined: 23 Oct 2011, 09:52
Location: Dintorni di Roma

Re: Bascom VS IDE-Arduino - chi vince?

Postby flz47655 » 11 Sep 2012, 20:19

Arduino dietro le quinte compila il file main.cpp che puoi trovare in \hardware\arduino\cores\arduino così fatto:

Code: Select all
#include <Arduino.h>

int main(void)
{
   init();

#if defined(USBCON)
   USBDevice.attach();
#endif
   
   setup();
   
   for (;;) {
      loop();
      if (serialEventRun) serialEventRun();
   }
       
   return 0;
}


Come puoi vedere viene incluso ulteriore codice come ad esempio del codice per la connessione USB (se definito il define), la Seriale, etc.. che fa lievitare la dimensione del firmware, codice che comunque se usi la seriale in qualche modo va inserito nel programma ugualmente..

Non credo che il compilatore C++ sia malvagio, bisognerebbe provare ad utilizzarlo senza le librerie di Arduino per vedere come si comporta, non penso però che ci sia una differenza così grossa, perlomeno non un rapporto 3:1

Il Bascom da questo punto di vista sembra comunque un linguaggio interessante

Ciao
flz47655
 
Posts: 639
Joined: 19 Jan 2012, 21:16

Re: Bascom VS IDE-Arduino - chi vince?

Postby filosofo » 12 Sep 2012, 07:28

vince sempre e con molta distanza, bascom batte comp-ardu 4:1 :)

è chiaro che i moduli, tipo la seriale, la spi, la i2c per essere configurate portano via dei byte preziosi come fa pure bascom.
quindi non penso che dipenda da quello che uno definisce.... penso che dipende da come viene compilato il sorgente....
definendo periferiche, il codice aumenta senza ombra di dubbio, ma, alla fine i codici che ho mostrato sono equivalenti.

sai lo stesso firmware bascom senza PRINT quanto occupa? ......soli 610 byte....
Code: Select all
$regfile "m328pdef.dat"
$include "DuinoLib.inc"
$crystal = 16000000
$external Anaread
'-- $baud = 9600
$noramclear

Dim Index As Byte , Value As Word , Total As Word , Average As Word
Dim Readings(10) As Word
Const Numreadings = 10

Index = 1                                                 
'-------------------------------------------------------------------------------
Do

   Total = Total - Readings(index)
   Anaread Adc5 , Value
   Readings(index) = Value
   Total = Total + Value
   Incr Index
   If Index > Numreadings Then Index = 1
   Average = Total / Numreadings
   '-- Print Average                                           

Loop

End

'890 bytes contro i 2838 bytes di IDE-arduino
'610 bytes senza print
'-------------------------------------------------------------------------------


questo è il risultato della compilazione.... magari non ci credete ;)
bas.jpg
bas.jpg (50.07 KiB) Viewed 2373 times
filosofo
 
Posts: 74
Joined: 23 Oct 2011, 09:52
Location: Dintorni di Roma


Return to BASCOM-AVR

Who is online

Users browsing this forum: No registered users and 23 guests