IAP на микроконтроллере LPC

Этот код является частью IAP на LPC:

#define IAP_LOCATION 0x7ffffff1
...
unsigned long command[5];
unsigned long result[3];
...
typedef void (*IAP)(unsigned int [],unsigned int[]);
IAP iap_entry;

iap_entry = (IAP) IAP_LOCATION;

iap_entry(command, result);

Может кто-нибудь объяснить, как это работает, особенно:

iap_entry = (IAP) IAP_LOCATION;
iap_entry(command, result)

person user3101497    schedule 21.12.2013    source источник


Ответы (1)


typedef void (*IAP)(unsigned int [],unsigned int[]);

IAP — это тип указателя на функцию (unsigned int[], unsigned int[]), возвращающую void

iap_entry = (IAP) IAP_LOCATION;

По адресу IAP_LOCATION есть какой-то код. Рассматривайте это как функцию C.

iap_entry(command, result);

Вызовите функцию


Как правило, это происходит, когда аппаратная часть содержит ПЗУ с предварительно скомпилированным кодом. Вы должны указать компилятору C, где этот код находится в памяти и какие типы аргументов он ожидает.

person Eric    schedule 21.12.2013
comment
+1 да - это точка входа в IAP (в прикладном программировании - мигает). Есть какая-то магия, которую можно сделать с этим невыровненным адресом — забудьте что. - person Martin James; 21.12.2013
comment
Бит большого пальца должен быть установлен для Cortex M. - person Turbo J; 24.12.2013
comment
не забудьте отключить прерывания!! он может работать, но останавливается, когда происходит прерывание во время вызова IAP. - person Traummaennlein; 17.04.2019