Go Down

Topic: [OT] PIC, 8051, MCU e CPU varie (Read 111036 times) previous topic - next topic

zoomx

Ma non è possibile/meglio includere dei cicli a vuoto realizzati in assembler in modo che il compilatore non possa ottimizzarli?

lesto

la NOP() nasce apposta per non essere ottimizzata, ma se la metti in cicli noon so cosa può succedere.

e zoomx il fulcro della discussione è che no, non puoi mettere istruzioni ASM dato che nessuno assicura che non vengano ottimizzate.
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

leo72


Ma esiste una tabella da poter consultare per sapere cosa il compilatore ottimizza e cosa no ? In base ai rispettivi livelli di ottimizzazione.

Forse consultando la documentazione del compilatore.

Quote

Perché dovrebbe ottimizzare NOP ? È talmente chiara, l utente la mette per perdere tempo, non per perdere tempo  :DD

Non viene ottimizzata la singola istruzione ma i blocchi di codice, come ti ha detto Lesto. Il problema non è "nop" in sé: se la metti nel sorgente, il compilatore la infila anche nel binario senza problemi. Se però spingi l'ottimizzazione, può essere che un compilatore troppo "intelligente", vedendo un ciclo vuoto (immagina un while con dentro una sola nop), inutile, chi ti garantisce che non venga segato via?

Quote

Io ho provato sia su arduino che su altri ide e la NOP perde il giusto tempo, l'ide arduinica usa un livello alto di ottimizzazione giusto ?

L'ottimizzazione di Arduino è per la dimensione, se attivi la compilazione verbosa, vedi che ad un certo punto compare "-Os", "s" sta per "size".
Sull'IDE 1.5.x mi pare che dal file platform.txt si possa cambiare l'ottimizzazione.

nid69ita

#1488
Jun 22, 2014, 10:18 am Last Edit: Jun 22, 2014, 10:22 am by nid69ita Reason: 1
Ma la Teensy 3.1 con ARM32 Cortex-M4 come vi sembra?   https://www.pjrc.com/store/teensy31.html
Pinout: https://www.pjrc.com/teensy/pinout.html
Ha anche una aggiunta a IDE Arduino per programmarlo, molte librerie. Per iniziare su ARM mi pare interessante, non capisco se poi si può passare ad un IDE/compilatore diverso.
my name is IGOR, not AIGOR

leo72

Se volete fare una cosa buona e giusta, comprate quel che vi pare ma non usate l'IDE per programmare i micro dei vostri prodotti  ;)
Usate sempre gli IDE ufficiali, e scrivete tutto il codice voi, almeno lo ottimizzate al massimo  ;)

Michele Menniti


Se volete fare una cosa buona e giusta....

dal vangelo secondo matLeo :D
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

nid69ita

La cosa interessante della Teensy a me pare il poter iniziare con un IDE semplice (Arduinico) come si fa con Arduino.
Poi fatta l'esperienza si potrebbe passare ad un compiler più sofisticato. Come spero per la Zero. Un IDE Arduinico per iniziare ma poi uno più esperto potrebbe passare a un IDE/Compilatore più sofisticato e/o magari ad un RTOS.
my name is IGOR, not AIGOR

lesto

il compiler è sempre lo stesso, alla fine dei giri, se stai sul free-open

invece quello che cambia è l'insieme di librerie. Io consiglio anche di studiarsi un rtos come ChibiOS, il fatto che il codice diventi compatibile arduino+cortex+altro val pure qualcosa!
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

nid69ita

Ho comprato la ST Nucleo F401RE, visto che su ebay un tedesco la vende a prezzo (11,90) competitivo con Farnel e similari con solo 5,50 euro di spedizione.
http://www.ebay.it/itm/281374518227?ssPageName=STRK:MEWNX:IT&_trksid=p3984.m1439.l2649

Domanda nuova: ho provato tre semplici sketch e va bene. Però quel che non capisco è come debuggare.
Mi spiego. Negli esempi forniti da Mbed ci sono delle printf() che se non ho capito male dovrebbero essere "dirottate" su seriale. Ora, avendo il cavetto usb collegato ma non un collegamento con connettore SWD, riesco a vedere in qualche modo questi printf() un pò come si fa su Arduino con Serial.print()  ?    Oppure è obbligatorio STLInk/V2 ?


In teoria la scheda ha già "On-board ST-LINK/V2-1 debugger/programmer with SWD connector"
my name is IGOR, not AIGOR

lesto

ci sono 2 vie: dire che la STDOUT è attraverto stlink, oppure usare le fprintf con descrtittore di file che punta al flusso stlink.

come fare ad inizializzare il tutto... guarda chibios, è un RTOS sviluppato tra l'altro da un italiano (molto disponibile sul forum), che permette di usare questo sistema.
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

nid69ita

Aggiornamento:
con MBED e Nucleo, bisogna solo creare un oggetto Serial, tipo questo esempio e stampare su lui.
Code: [Select]
#include "mbed.h"
//------------------------------------
// Hyperterminal configuration
// 9600 bauds, 8-bit data, no parity
//------------------------------------

Serial pc(SERIAL_TX, SERIAL_RX);

DigitalOut myled(LED1);
int main() {
  int i = 1;
  pc.printf("Hello World !\n");
  while(1) {
    wait_ms(1000);
    pc.printf("This program runs since %d seconds.\n", i++);
    myled = !myled;
  }
}


Si compila il programma online, si ottiene un file .bin che si può copiare sulla Nucleo attraverso un driver virtuale (tipo penna usb, bello, copia-incolla !!!) oppure con "STM32 ST-LINK Utility.exe"
Poi anche da Monitor Seriale Arduino sulla porta USB virtuale della Nucleo si vedono le print()

Lo strano è che, 1 alcuni esempi mbed per nucleo hanno una printf() a muzzo senza quel oggetto Serial, 2 ho aggiornato nel workspace online la libreria mbed, altrimenti col cappero che funzionava.
my name is IGOR, not AIGOR

Testato

Io finché non esce un compilatore offline non le considero proprio
- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

lesto

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

nid69ita

Rettifico, per la Nucleo, ora con firmware aggiornato e librerie mbed aggiornate qualsiasi printf() va su Monitor Seriale.
Code: [Select]
include "mbed.h"

DigitalIn  myBut(USER_BUTTON);
DigitalOut myLed(LED1);  //PwmOut myLed(LED1);  
AnalogIn   myPot(A0);

int main()
{ while(1)
 { if (myBut == 0) break;  // Button is pressed exit while
   myLed = !myLed;                                                 // Toggle the LED state
   printf("Led value = %d", myLed.read());
   uint16_t valPot = myPot.read_u16();          // read pot at A0
   printf(" Pot value = %d\n", valPot);
   wait(0.2); // 200 ms
 }
 error("Loop unexpectedly terminated");
}
my name is IGOR, not AIGOR

leo72


Io finché non esce un compilatore offline non le considero proprio

+1

Go Up