Pages: 1 ... 98 99 [100] 101 102   Go Down
Author Topic: [OT] PIC, 8051, MCU e CPU varie  (Read 66801 times)
0 Members and 5 Guests are viewing this topic.
Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

La delay_ms/us non si basa su un timer del micro ma è una funzione che dovrebbe (dico "dovrebbe") usare dei cicli che a tot ms/us eseguono una serie di centinaia/migliaia di semplici istruzioni macchina, che hanno un tempo fisso di numeri di clock per essere eseguite. Ovviamente si spera che il compilatore non ottimizzi il codice, per cui tutto sta, come ti ha detto Lesto, anche a come l'utente chiede di ottimizzare il codice, sperando che l'IDE informi il compilatore di non ottimizzare mai quei cicli, altrimenti saltano le tempistiche. Se io programmo un timer, non c'è compilatore che tenga: se chiedo di mettere un byte in un registro, lui me lo farà sempre, a qualunque livello di ottimizzazione.

insomma, tutto questo per dire che sei libero di usare _delay_ms/us ma io mi ci perderei un attimino a fare una cosina più pulita lo stesso.
Logged


0
Offline Offline
Shannon Member
****
Karma: 129
Posts: 10433
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

in teoria esiste proprioper questo l'istruzione "nop()" che non fa nulla ma perde uno ciclo macchina, e non viene ottimizzata..

AVR dice di  non usare NOP() ma delle librerie ad hoc, per i pic non so..
Logged

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

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Nel core di Arduino la delayMicroseconds è basata su nop(), e così è anche la delay presente nel core Avr.
Ora non sono a casa e non ho l'ambiente Microchip sotto mano, per cui non so dirti ma credo comunque che anche la delay_ms dei PIC usi lo stesso meccanismo.

ma per tempi così brevi va benissimo. il problema sorge quando si ragiona in ms invece che in us.
Logged


0
Offline Offline
Faraday Member
**
Karma: 45
Posts: 5780
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ma esiste una tabella da poter consultare per sapere cosa il compilatore ottimizza e cosa no ? In base ai rispettivi livelli di ottimizzazione.
Perché dovrebbe ottimizzare NOP ? È talmente chiara, l utente la mette per perdere tempo, non per perdere tempo  :DD

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 ?
« Last Edit: June 10, 2014, 01:32:19 am by Testato » Logged

- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

0
Offline Offline
Sr. Member
****
Karma: 3
Posts: 448
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

0
Offline Offline
Shannon Member
****
Karma: 129
Posts: 10433
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

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

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged


ivrea (to)
Online Online
Faraday Member
**
Karma: 74
Posts: 4590
miaaao ^-^
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
« Last Edit: June 22, 2014, 03:22:36 am by nid69ita » Logged

my name is IGOR, not AIGOR

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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  smiley-wink
Usate sempre gli IDE ufficiali, e scrivete tutto il codice voi, almeno lo ottimizzate al massimo  smiley-wink
Logged


Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 478
Posts: 12284
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Se volete fare una cosa buona e giusta....
dal vangelo secondo matLeo smiley-grin
Logged

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

ivrea (to)
Online Online
Faraday Member
**
Karma: 74
Posts: 4590
miaaao ^-^
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

my name is IGOR, not AIGOR

0
Offline Offline
Shannon Member
****
Karma: 129
Posts: 10433
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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!
Logged

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

ivrea (to)
Online Online
Faraday Member
**
Karma: 74
Posts: 4590
miaaao ^-^
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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"
Logged

my name is IGOR, not AIGOR

0
Offline Offline
Shannon Member
****
Karma: 129
Posts: 10433
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

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

ivrea (to)
Online Online
Faraday Member
**
Karma: 74
Posts: 4590
miaaao ^-^
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Aggiornamento:
con MBED e Nucleo, bisogna solo creare un oggetto Serial, tipo questo esempio e stampare su lui.
Code:
#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.
Logged

my name is IGOR, not AIGOR

Pages: 1 ... 98 99 [100] 101 102   Go Up
Jump to: