Nikitoc 0 23 сентября, 2011 Опубликовано 23 сентября, 2011 · Жалоба Здравствуйте. Несколько дней потрачено впустую на безуспешные попытки получить указатель на нестатическую функцию-член класса напр. "Process" (она же является задачей, которую необходимо создать с помощью: xTaskCreate(Process, " Process ", configMINIMAL_STACK_SIZE, NULL, 1, NULL); Если функцию объявить как static, то все работает она создается и крутится. Если static не писать, компилятор ругается: a pointer to a bound function may only be used to call the function Что это значит? В чем может быть проблема? Кто нибудь сталкивался с подобным? Убедительная просьба отвечать только по теме. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sergeeff 1 23 сентября, 2011 Опубликовано 23 сентября, 2011 · Жалоба Вы почитайте http://www.newty.de/fpt/fpt.html. Лучше читать pdf'ку, более внятные примеры там. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nikitoc 0 27 сентября, 2011 Опубликовано 27 сентября, 2011 · Жалоба Спасибо. Очень полезная дока. Удобно использовать в качестве справочника. Адрес функции мне удалось получить и присвоить указателю. Он корректен (проверял по map-файлу). Но функция xTaskCreate (freeRTOS) наверное неправильно использует его, т.к. при попытке вызова этой задачи из планировщика происходит HardFault_Exception. В регистре перехода содержится почему-то значение 0xFFFFFFFD, вместо корректного 0x08002599. Может необходимо произвести какое-нибудь приведение типов перед передачей указателя в xTaskCreate? P.S.: Если тема вопроса имеет большее отношение к freeRTOS, просьба к модераторам - перенести в соответствующий раздел. Добавлено: Мда... Эта функция (xTaskCreate) в чисто Си-шном варианте принимает указатель на статическую функцию (с точки зрения С++), а я пытаюсь передать указатель на нестатическую. Получается нужно допиливать исходники freeRTOS? Тоскливо как-то... Может быть кто-то использовал freeRTOS под плюсами? Какие доработки необходимо сделать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 27 сентября, 2011 Опубликовано 27 сентября, 2011 · Жалоба Получается нужно допиливать исходники freeRTOS? Тоскливо как-то... Может быть кто-то использовал freeRTOS под плюсами? Какие доработки необходимо сделать?Напишите статическую или "внеклассовую" функцию, которая будет вызывать функцию-член с конкретным объектом. И уже указатель на эту функцию передавайте куда нужно. void myfunc() { MyObject.MyMethod(); } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nikitoc 0 28 сентября, 2011 Опубликовано 28 сентября, 2011 · Жалоба Спасибо большое. Так получилось. Это немного не то, что планировалось, но некоторыми мелочами приходится жертвовать :-) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nikitoc 0 29 сентября, 2011 Опубликовано 29 сентября, 2011 · Жалоба Понемногу продвигаюсь :-) Сейчас пытаюсь сделать так, чтобы конкретный обработчик прерывания был расположен в конкретном классе. Я понимаю, что он должен быть статическим методом класса, но как в стартапе указать его адрес? Импортировать имя метода вместе с именем класса никак не получается (типа IMPORT Class::Function). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sergeeff 1 29 сентября, 2011 Опубликовано 29 сентября, 2011 · Жалоба Нет никакой возможности сообщить С++'ое (mangled) имя в АСМ. Посему делайте, как вам советовал Сергей Борщ, через промежуточную С функцию. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 14 29 сентября, 2011 Опубликовано 29 сентября, 2011 · Жалоба Сейчас пытаюсь сделать так, чтобы конкретный обработчик прерывания был расположен в конкретном классе. Посмотрите вот этот топик, возможно пригодится. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться