Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Засада с указателями на функцию.
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
-Игорь-
При любом объявлении и использовании указателя на функцию, адрес функции записывается со смещением на один байт. Т.е. если например адрес функции 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
Genadi Zawidowski
А в чём проблема-то? Какое дело программисту, что за значение там лежит, если его получили корректным способом?
Младший бит в адресе на ARM имеет особый смысл, забейте...
Сергей Борщ
Цитата(-Игорь- @ Jun 30 2014, 10:13) *
При любом объявлении и использовании указателя на функцию, адрес функции записывается со смещением на один байт. Т.е. если например адрес функции 080021ac то указатель на функцию инициализируется как 080021ad.
Младший бит в ARM используется как признак Thumb/ARM кода. Компилятор все делает правильно.
-Игорь-
Спасибо за оперативные ответы. Не ожидал. Буду знать.
Цитата(Genadi Zawidowski @ Jun 30 2014, 11:26) *
А в чём проблема-то? Какое дело программисту, что за значение там лежит, если его получили корректным способом?

Проблема в моем коде, теперь это точно понятно. Буду искать ошибку. Спасибо.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.