[C] Dimensione massima di un vettore

di il
22 risposte

22 Risposte - Pagina 2

  • Re: [C] Dimensione massima di un vettore

    Beh, la proposta è allettante, ma la mia idea era di riesumare un pc vecchio per farne un campionatore tipo AKAI S2000.
    Dato che non ci si può fare più niente, mi sembrava una cosa carina trovargli un impegno per la vecchiaia...
    Purtroppo del C ho visto proprio poco e quando usavo il dos non sapevo niente di programmazione. Ho sempre programmato in VB6 e negli ultimi 4 anni con python. A parte qualche programma per arduino, in C non ho mai fatto niente.
    In ogni caso, con un po' di aiuto, a lavoro finito posto tutto così chi ha un pc vecchio può riutilizzarlo così!
  • Re: [C] Dimensione massima di un vettore

    Non conosco nulla del tuo progetto ma stento a capire come tu possa ricavare un campionatore con quelle caratteristiche da un vecchio PC Dos.
  • Re: [C] Dimensione massima di un vettore

    Per ora ho scritto la parte di programma che si occupa di leggere i valori in ingresso dalla porta parallela. Alla fine non ho usato un array ma ho usato malloc. Ho impostato la porta parallela nel bios su EEP (mi pare sia questa la sigla ma non ce l'ho sotto mano...).
    Poi va bene che il pc è vecchio, ma se ce la faceva un atari negli anni 80, direi che un pentium II dovrebbe farcela senza problemi...
  • Re: [C] Dimensione massima di un vettore

    Anche la malloc non potrà allocare molta memoria
  • Re: [C] Dimensione massima di un vettore

    A dire il vero sapevo che malloc può allocare poco più di 16MB di memoria. Io ne avrei bisogno solo 8...
    Il mio problema è che nella mia vita di programmatore ho solo lavorato con i database e non ho mai fatto niente di questo tipo. La gestione della memoria a questo livello è assolutamente un campo da esplorare. Per iniziare ho scritto un programma in assembler per PIC per gestire due ram da 4MB. Mi sono fermato perché il PCB è un disastro da fare. Ho provato ma mi viene una scheda grossa come una scheda arcade degli anni 80!
    Al momento sono al lavoro quindi non ho dietro il programma ma questo è il codice per come me lo ricordo:

    chara *dato;
    unsigned long bytes=8000000;
    dato=(char *) malloc(bytes);

    outportb(0x37a,0x020);
    for (bytes=0;bytes<8000000;bytes++){
    dato=inportb(0x37c);}

    quindi, dichiaro il puntatore, ne faccio un cassetto di memoria, imposto la parallela in lettura e la leggo per 8 mb.
    L'unico problema è che nonostante la dichiarazione di bytes come unsigned long, se vado a fare una printf di bytes durante il "riempimento", bytes arriva a poco più di 32000 (come se fosse un int) e poi diventa negativo
  • Re: [C] Dimensione massima di un vettore

    Con il dos nativo NON hai a disposizione 16M ma solo 640 K.

    Controlla il valore del puntatore

    dato

    dopo la .malloc. Sarà NULL per indicare l'errore
  • Re: [C] Dimensione massima di un vettore

    Ecco perché...
    Allora con far?

    chara far *dato;
    long bytes=1000000L;
    dato=(char *) farmalloc(bytes);

    outportb(0x37a,0x020);
    for (bytes=0;bytes<1000000;bytes++){
    dato=inportb(0x37c);}
  • Re: [C] Dimensione massima di un vettore

    Forse non mi sono spiegato.

    È un limite del DOS.

    Puoi fare dei tentativi ma con la memoria convenzionale non potrai superare mezzo mega.
    Il DOS supportava anche la memoria XMS/EMS e poteva lavirare anche con DPMI ma la loro gestione è più complessa.

    Dovresti provare ad utilizzare il compilatore DOS DJGPP

    http://www.delorie.com/djgpp
Devi accedere o registrarti per scrivere nel forum
22 risposte