array[da:a] con switch case problema memoria [ot] ARM STM32 arduino

domanda veloce e semplice, si può selezionare un array da un inizio x a una fine y senza occupare memoria creando un secondo array??

dovrei fare una cosa simile:

char array[100] = {'c','i','a','o'}

switch (array[da(2):a(3)]) { //quindi solo a , o
    case "ao":
      //.....
      break;
    case "ecc...":
      //.....
      break;
    default: 
      //.....
  }

esiste una cosa del genere?

Assolutamente no.
Inoltre assolutamente l'istruzione switch può solo valutare numeri interi (char, int, long) e dicendo questo si intende un carattere come rappresentazione numerica ('A'=>65) e per nulla quindi le stringhe (che sono vettori e quindi valori "multipli")

Testato:
oppure, prova anche ad usare gli operatori, tipo un case su ('a' || 'o'), cosi' non devi scrivere case uguali

Nella switch il case è esclusivamente un valore numerico intero, non sono ammessi i float, anche se tale valore può derivare da un qualunque calcolo sulla riga stessa del case non sono ammessi gli operatori logici.
Il case lavora sempre e solamente su un singolo valore per volta.
E' possibile fare una somma pesata per analizzare una porzione di stringa, ovvero si prendono i singoli valori ascii dei caratteri e si sommano tra loro dandogli un peso crescente a seconda della posizione, però è un sistema che è limitato dal valore intero massimo rappresentabile con 32 bit e permette di analizzare porzioni di vettore composte da pochi caratteri.

forse si puo' aggirare la cosa ?
idea cosi' al volo, non provata

se come variabile da valutare metti la cella che contiene a piu' quella della o - switch (array cella 2 + 3)
e poi come case metti la relativa somma ascii ?
si incazza il compilatore ? :slight_smile:

astro mi ha anticipato, sarebbe quello che ho pensato io ?

switch (array[da(2):a(3)])

mmm... qualcosa di simile è possibile con linguaggi di alto livello specie se interpretati, es Python permette una sintassi vagamente simile.

Resta però da capire perché si ha necessità di fare ciò?

Guardando il codice mi viene in mente il parser incrementale che è già una impresa farlo funzionare su un pc, pensa pensa su una MCU come l'Atmega.

switch (*ptr) {
   case 'i':
       if (*(ptr+1) == 'o')  {
          ptr++; 
          break;
       } else if (*(ptr+1) == 'l') {
       } else { 
           
       }   
       break;
   case 'o':
        .... 
}

PS: il codice sopra mi fa già stare male

Ciao.

ok grazie per le idee .. per ora valuto perché sto lavorando con le pagine web è questa la necessità di non caricare troppe variabili "doppioni".

purtroppo ho un buffer seriale che più grande è e meglio è...
più vado avanti con la programmazione è più mi rendo conto di dover diminuire quest'ultimo array a causa della memoria limitata.

per questo cercavo un sistema del genere, e l'idea di dare un peso ai caratteri non è male potrebbe essere anche un CRC 16 per esempio .. solo che in rari casi potrebbero coincidere con altre stringe, comunque elaborerò un algoritmo almeno ci proverò.

per quanto riguarda la bassa memoria faccio un piccolo [OT]
volevo risolvere il problema con un micro più grande e potente che un atmega (tirato a 20mhz)
ero partito usando uno di quei arduino mini pro (328p) a 2€ su ebay risaldando il quarzo, quindi non volevo superare di tanto il prezzo finale del mio dispositivo anche perché una volta finito ne ho da realizzare un bel po.

sono incappato in questi ARM STM32 http://www.ebay.it/itm/1PCS-STM32F103C8T6-ARM-STM32-Minimum-System-Development-Board-Module-Arduino-/181632584671?pt=LH_DefaultDomain_0&hash=item2a4a254bdf

ovviamente potrei profondamente sbagliarmi ma purtroppo non ho trovato documentazione, mi viene da pensare che sono arduini con arm.. sapete dirmi qualcosa in merito, o altrimenti consigliarmi altri moduli low cost più potenti?

poi ho trovato anche :
http://www.ebay.it/itm/1PCS-STM8S103F3P6-ARM-STM8-Minimum-System-Development-Board-Module-Arduino-/351255887840?pt=LH_DefaultDomain_0&hash=item51c87b7fe0
e:
http://www.ebay.it/itm/ARM-STM8S103K3T6-STM8-Minimum-System-Development-Board-for-Arduino-/121381992897?pt=LH_DefaultDomain_0&hash=item1c42ee39c1

Assolutemente no, quei moduli NON sono Arduini con un Arm sopra.
E quella usb ti inganna. Non li programmi tramite un IDE e USB ma necessitano di un loro programmatore.
Inoltre l'ambiente di sviluppo e quindi codice/librerie NON è compatibile con Arduino.
Qualcosa di più potente (Arm con più SRAM) e "abbastanza" compatibile è Teensy 3.1 ma costa molto.

che peccato :frowning:
e si non costa poco, carino però ...

poi tornando al srm32
ho trovato questo :

scusate se insisto ma qui parlano di una libreria compatibile può essere?

Interessante. Io ho una Maple pagata poco ma con un suo IDE del menga.

Però, non proprio una libreria. Hanno creato board per IDE Arduino e alcune librerie le hanno adattate, ma se poi leggi in giro nei vari menu di quel sito, poche cose sono tested.

E si parla più che altro della Maple.