2010-06-06 30 views
6

En utilisant le compilateur Microchip C18 avec un pic18f, je veux créer un "grand" tampon de 3000 octets dans l'espace de données du programme.Créer un gros buffer sur un pic18f avec le compilateur c18 de microchip

Si je mets cela dans la main() (sur la pile):

char tab[127]; 

J'ai cette erreur:

Error [1300] stack frame too large 

Si je l'ai mis dans mondiale, je cette erreur:

Error - section '.udata_main.o' can not fit the section. Section '.udata_main.o' length=0x0000007f 

Comment créer un grand tampon? Avez-vous un tutoriel sur la façon de gérer un gros buffer sur pic18f avec c18?

Répondre

2

Voici un tutoriel sur exactement ceci: http://www.dwengo.org/tips-tricks/large-variables

Fondamentalement, vous déclarez votre variable dans une section spéciale, et un pointeur vers dans la section par défaut:

#pragma udata DATA // section DATA 
    int large_table[768]; 

    #pragma udata // return to default section 
    int *table_ptr = &large_table[0]; 

Ensuite, vous mettez à jour l'éditeur de liens script pour définir la grande section en ajoutant quelque chose comme ceci:

DATABANK NAME=data  START=0x200   END=0x7FF   PROTECTED 
SECTION NAME=DATA  RAM=data 

Notez qu'il n'y a généralement pas de mémoire non cartographiées dans lequel vous pouvez juste p dans votre section DATA, mais les tampons USB sont généralement mon premier choix pour canibaliser (sauf si vous avez besoin d'USB dans le même projet bien sûr ...)