|
FreeRTOS and CPP, компиляция прокета на CPP с FreeRTOS |
|
|
|
 |
Ответов
(1 - 12)
|
Dec 16 2015, 00:26
|

Познающий...
     
Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125

|
QUOTE (k155la3 @ Dec 15 2015, 21:25)  В таком случае может следует переписать все с CPP на C ? Переписывать ничего не нужно. Сначала полезные статьи Курниц А. Операционная система FreeRTOS, а здесь про FreeRTOS и Си++. Моё видение следующее: добавить директорию с ОС к проекту. В настройках компилятора указать компиляцию по расширению файлов. Таким образом ОС компилируется сишным, а всё остальное си++-ным компилятором. Возможно, что можно и всё компилировать под Си++. Но у меня валится пара ошибок, разбираться не хочется. Далее. Вы создаёте задачи, и которых вызвыаете Си++ код. В этом коде можете вызывать сервисы ОС. Единственное, что при вызове кода Си++ из Си могут возникать проблемы, тогда нужно делать как-то так CODE В хидере extern "C" int cSysClockWrapper( TSysClockType source );
В c++ коде int cSysClockWrapper( TSysClockType source ) { return CSysClock::init( source ); }
--------------------
Выбор.
|
|
|
|
|
Dec 16 2015, 04:30
|
Частый гость
 
Группа: Участник
Сообщений: 139
Регистрация: 9-11-12
Из: Санкт-Петербург
Пользователь №: 74 315

|
Цитата(haker_fox @ Dec 16 2015, 04:49)  Ах, да.. забыл... нужно что-то решать с динамическим выделением памяти, если оно используется в проекте на си++. Яимею в виду new и delete. а что там, собственно, решать? Код void* operator new(size_t sz) { return pvPortMalloc(sz); } void* operator new[](size_t sz) { return pvPortMalloc(sz); } void operator delete(void* p) { vPortFree(p); } void operator delete[](void* p) { vPortFree(p); } void* operator new(size_t size, void* p) { (void)size; return p; } void* operator new[](size_t size, void* p) { (void)size; return p; } void operator delete(void*, void*) { } void operator delete[](void*, void*) { }
|
|
|
|
|
Dec 20 2015, 09:42
|
Профессионал
    
Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848

|
Цитата(haker_fox @ Dec 16 2015, 09:36)  На данном этапе я этого не знал. Но приведённый вами код - скорее всего решение всех проблем, в том числе и моих (сам занимаюсь этим вопросом).
Сомневаюсь, что только конструкторы объектов будут выполняться. Сомнения, до определенной степени, крайне полезны. Проверить отработку конструкторов можно "оттрасировав" через дебагер стартап-код, который для CPP. В (IAR) опциях проекта/дебагера надо заменить стандартную метку (которая соотв-ет main), на метку стартап-кода. Но это занятие для интелектуалов - вызовы конструкторов (насколько я понял) идут косвено-таблично-списком  По результатам оперативно не отчитаюсь, тк. сейчас надо выгонять функциональную-прикладную часть проекта ( на С) Цитата(Непомнящий Евгений) (Непомнящий Евгений @ Dec 18 2015, 13:18) haker_fox, о результатах чего? Если freertos + c++ - все хорошо, полет нормальный. Собственно иное было бы странно, с и с++ без проблем уживаются вместе В общем-то, ДА. Судя по включениям в h-файлы freeRTOS Код #ifdef __cplusplus extern "C" { #endif
|
|
|
|
|
Dec 20 2015, 09:55
|
Частый гость
 
Группа: Участник
Сообщений: 139
Регистрация: 9-11-12
Из: Санкт-Петербург
Пользователь №: 74 315

|
Цитата(k155la3 @ Dec 20 2015, 12:42)  Сомнения, до определенной степени, крайне полезны. Проверить отработку конструкторов можно "оттрасировав" через дебагер стартап-код, который для CPP. Это если речь о конструкторах глобальных объектов или статических членов классов. А выше разговор шёл об использовании new. Цитата(k155la3 @ Dec 20 2015, 12:42)  В (IAR) опциях проекта/дебагера надо заменить стандартную метку (которая соотв-ет main), на метку стартап-кода. Обычно достаточно снять галочку возле "main"
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|