При любом объявлении и использовании указателя на функцию, адрес функции записывается со смещением на один байт. Т.е. если например адрес функции 080021ac то указатель на функцию инициализируется как 080021ad. Пробовал функции с аргументами и без, объявлял через typedef и без. Инициализировал указатели в коде и в массиве указателей. Пробовал компилятор: gcc version 4.8.4 20140526 (release) [ARM/embedded-4_8-branch revision 211358] (GNU Tools for ARM Embedded Processors) последней и предпоследней версии. Пробовал компилятор от Ментор График: arm-none-eabi-gcc (Sourcery CodeBench Lite 2014.05-28) 4.8.3 20140320 (prerelease) Результат один и тот же.
На данный момент объявление делаю так: typedef uint_fast16_t (*FUNC)(uint_fast16_t); FUNC func;
Сижу под убунтой: Ubuntu 12.04.4 LTS
|