abivan (07.09.2015 11:32, просмотров: 2317)
Не выходит сделать вызов ф-ии со смещением по указателю PIC18 ht9.51pl3. Данный код работает на майкрософтовом компиляторе. Все 3 вызова попадают куда нужно( в ф-ю Finished)
Если убрать все const то и в HT все начинает работать.
Нужно чтобы структура находилась в кодовой памяти.
typedef struct{
void (*pFinished)(void);
void (*pLoaded)(void);
void (*pRegular)(void);
}t_Method;
unsigned long dwTmp;
static void Finished(void){
dwTmp=1;
};
static void Loaded(void){
dwTmp=2;
};
static void Regular(void){
dwTmp=3;
};
const t_Method MethodIP = {
Finished,
Loaded,
Regular
};
typedef t_Method (*PF)(void);
int main(){
unsigned long dwLocal;
PF pF;
const t_Method *pMethod;
pMethod=&MethodIP; //ok
(pMethod->pFinished)(); //ok
pF=(PF)(pMethod->pFinished); // ok если в HT написать так typedef t_Method (const*PF)(void);
dwLocal=dwTmp=(unsigned long )pF;
(*pF)();
pF=*((PF*)pMethod+0); // вот это в HT никак не работает а нужен именно такой вызов со смещением
dwLocal=dwTmp=(unsigned long )pF;
(*pF)();
}