3

マイクロチップの PIC18F4550 を C コンパイラで使用しています。デフォルトでは「プログラム メモリ」が使用されますが、「データ メモリ」を使用したいのは、より多くの機能が得られるからです。私はプログラム言語 C でそれを行います。

そのコード:

#pragma code
/******************************************************************************/

void main (void)
{   

    TRISD = 0x00;               // PORTD  als uitgang
    TRISB = 0b00110000;         // RB4 en RB5 als ingang
    TRISA = 0x00;               // RA output

    RCONbits.IPEN = 0;          // prioriteit uit
    INTCONbits.GIE = 1;         // enable interrupt
    INTCONbits.RBIE = 1;        // interrupt portB aan

    while(1)
    {   
        _asm sleep _endasm  
    }
}

#pragma interrupt ISR
void ISR (void)
{
    int rood[] = {0,0,1,0,1,0,1,0,1,0,1,1,1,0,0,0,0,1,1,0,1,0,1,0,1,0,0,0,1,1,0,1,1,1,0,1,0,1,0,1,0,0,0,1,1,1,1,0,1,1,};

    if (INTCONbits.RBIF==1)
    {
        if(PORTBbits.RB5==0)        // S3 ingedrukt ?
        {
            int i = 0;
            int b;
            do {
                LATAbits.LATA2 = rood[i];
                LATDbits.LATD1 ^= 1;
                b = 0;
                do {
                    b++;
                }while(b <= 1500);

                i++;
            }while(rood[i] <= 50);

            //LATDbits.LATD1 ^= 1;      // D2 togglen

        }

    }   
    INTCONbits.RBIF = 0;
}
4

1 に答える 1

2

このデバイスのデータシートは、データ メモリがスタティック RAM であり、そこから命令デコード ロジックへのデータ パスがないことを示しているようです。つまり、データ メモリを使用して実行用のプログラム コードを保存することはできません。それがあなたの目標だったなら、あなたは運が悪いです。

揮発性ストレージの割り当てに関しては、プログラム メモリには RAM が含まれていないように見えるため、C コンパイラはすべての変数などをデータ RAM から自動的に割り当てると思います。

つまり、不揮発性 (または半揮発性) データの保存には、「データ」EEPROM と「プログラム」フラッシュのどちらかしか選択できません。ドキュメントを掘り下げる必要がある場合があります。これは、コンパイラ プラグマまたはリンカ マップ ファイルを使用して行うか、レジスタを介して間接的および明示的にアクセスを処理する必要がある可能性があります。

于 2011-04-20T19:17:48.613 に答える