У меня есть dsPIC33 и я программирую его с использованием MPLAB X.
У меня есть три файла: main.c
ADC.c
ADC.h
В ADC.h я делаю кучу переменныхинициализация выглядит следующим образом:
typedef struct pinPair{
unsigned CH0:5,CH123:1,STAT:8,:2;
unsigned I:16;
unsigned V0:16;
unsigned V1:16;
unsigned V2:16;
}pinPair;
typedef pinPair PINPAIRS [5];
extern PINPAIRS pinPairs __attribute__((space(dma)));
, затем в моем файле main.c я понимаю переменную pinPairs:
//Define pinPairs data buffers
PINPAIRS pinPairs __attribute__((space(dma),aligned(256)));
int main(void) {
...
}
Теперь в моем файле ADC.c содержится запутанная часть, переменная pinPairчетко выровнен где-то в памяти плотины, потому что если я сделаю это:
DMA0STA=__builtin_dmaoffset(pinPairs);
, компилятор просто сделает свое дело, но если я сделаю это так, как я намеревался:
DMA0STA=__builtin_dmaoffset(pinPairs[pairCounter]);
Я получаю ошибку:
error: Argument to __builtin_dmaoffset() is not the address of an object in a dma section;
Но это все же !!!
Кто-нибудь знает, что означает эта ошибка и как я могу использовать переменную так, как я хочу?