Перейти к содержанию
    

FreeRTOS and CPP

Есть проект, писаный на CPP (IAR/MSP430).

Как правильно прикрутить проект к FreeRTOS ?

 

По-сути, прокт ++ не использует, только структуры и расширения синтаксиса.

В таком случае может следует переписать все с CPP на C ?

Изменено пользователем k155la3

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В таком случае может следует переписать все с CPP на C ?

Переписывать ничего не нужно.

Сначала полезные статьи Курниц А. Операционная система FreeRTOS, а здесь про FreeRTOS и Си++.

 

Моё видение следующее: добавить директорию с ОС к проекту. В настройках компилятора указать компиляцию по расширению файлов. Таким образом ОС компилируется сишным, а всё остальное си++-ным компилятором. Возможно, что можно и всё компилировать под Си++. Но у меня валится пара ошибок, разбираться не хочется. Далее. Вы создаёте задачи, и которых вызвыаете Си++ код. В этом коде можете вызывать сервисы ОС. Единственное, что при вызове кода Си++ из Си могут возникать проблемы, тогда нужно делать как-то так

В хидере
extern "C" int cSysClockWrapper( TSysClockType source );

В c++ коде
int cSysClockWrapper( TSysClockType source )
{
    return CSysClock::init( source );
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ах, да.. забыл... нужно что-то решать с динамическим выделением памяти, если оно используется в проекте на си++. Яимею в виду new и delete. Т.к. менеджер кучи у FreeRTOS свой. Кстати, сразу рекомендую найти менеджер кучи, любезно выложенный zltigo. Над стандартным (я имею в виду из ОСи) он имеет некоторые преимущества.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ах, да.. забыл... нужно что-то решать с динамическим выделением памяти, если оно используется в проекте на си++. Яимею в виду 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*)
{
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а что там, собственно, решать?

На данном этапе я этого не знал. Но приведённый вами код - скорее всего решение всех проблем, в том числе и моих (сам занимаюсь этим вопросом).

 

 

Сомневаюсь, что только конструкторы объектов будут выполняться.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

haker_fox, den_po спасибо за инф. и ссылки.

Курница док читаю, хорошо расписано, только мало.

Будем попробовать.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

haker_fox, den_po спасибо за инф. и ссылки.

Курница док читаю, хорошо расписано, только мало.

Будем попробовать.

Пожалуйста! :rolleyes: Если не сложно, отпишитесь, пожалуйста, о результатах. Ибо сейчас на этом пути сам. Опыт добываю. Может быть что-то полезное для себя узнаю.

 

Но в целом у Курница объёмная статья. Самый полный и свежий материал только на офсайте :rolleyes:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

haker_fox, о результатах чего? Если freertos + c++ - все хорошо, полет нормальный. Собственно иное было бы странно, с и с++ без проблем уживаются вместе :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

haker_fox, о результатах чего? Если freertos + c++ - все хорошо, полет нормальный. Собственно иное было бы странно, с и с++ без проблем уживаются вместе :)

Я в этом не сомневался!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На данном этапе я этого не знал. Но приведённый вами код - скорее всего решение всех проблем, в том числе и моих (сам занимаюсь этим вопросом).

 

 

Сомневаюсь, что только конструкторы объектов будут выполняться.

 

Сомнения, до определенной степени, крайне полезны.

Проверить отработку конструкторов можно "оттрасировав" через дебагер стартап-код, который для CPP.

В (IAR) опциях проекта/дебагера надо заменить стандартную метку (которая соотв-ет main), на метку стартап-кода.

Но это занятие для интелектуалов - вызовы конструкторов (насколько я понял) идут косвено-таблично-списком :)

 

По результатам оперативно не отчитаюсь, тк. сейчас надо выгонять функциональную-прикладную часть проекта ( на С)

 

(Непомнящий Евгений @ Dec 18 2015, 13:18)

haker_fox, о результатах чего? Если freertos + c++ - все хорошо, полет нормальный. Собственно иное было бы странно, с и с++ без проблем уживаются вместе

В общем-то, ДА.

 

Судя по включениям в h-файлы freeRTOS

#ifdef __cplusplus
extern "C" {
#endif

 

 

 

 

 

 

 

 

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сомнения, до определенной степени, крайне полезны.

Проверить отработку конструкторов можно "оттрасировав" через дебагер стартап-код, который для CPP.

Это если речь о конструкторах глобальных объектов или статических членов классов. А выше разговор шёл об использовании new.

 

В (IAR) опциях проекта/дебагера надо заменить стандартную метку (которая соотв-ет main), на метку стартап-кода.

Обычно достаточно снять галочку возле "main"

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Обычно достаточно снять галочку возле "main"

Или в конструктор вставить printf, т.к. у меня нет дебаггера, если имеется в виду железный :rolleyes:

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...