реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Засада с указателями на функцию.
-Игорь-
сообщение Jun 30 2014, 07:13
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 42
Регистрация: 8-10-11
Пользователь №: 67 615



При любом объявлении и использовании указателя на функцию, адрес функции записывается со смещением на один байт. Т.е. если например адрес функции 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
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение Jun 30 2014, 07:26
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



А в чём проблема-то? Какое дело программисту, что за значение там лежит, если его получили корректным способом?
Младший бит в адресе на ARM имеет особый смысл, забейте...
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jun 30 2014, 07:27
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(-Игорь- @ Jun 30 2014, 10:13) *
При любом объявлении и использовании указателя на функцию, адрес функции записывается со смещением на один байт. Т.е. если например адрес функции 080021ac то указатель на функцию инициализируется как 080021ad.
Младший бит в ARM используется как признак Thumb/ARM кода. Компилятор все делает правильно.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
-Игорь-
сообщение Jun 30 2014, 08:11
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 42
Регистрация: 8-10-11
Пользователь №: 67 615



Спасибо за оперативные ответы. Не ожидал. Буду знать.
Цитата(Genadi Zawidowski @ Jun 30 2014, 11:26) *
А в чём проблема-то? Какое дело программисту, что за значение там лежит, если его получили корректным способом?

Проблема в моем коде, теперь это точно понятно. Буду искать ошибку. Спасибо.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 07:11
Рейтинг@Mail.ru


Страница сгенерированна за 0.01358 секунд с 7
ELECTRONIX ©2004-2016