k155la3 26 15 декабря, 2015 Опубликовано 15 декабря, 2015 (изменено) · Жалоба Есть проект, писаный на CPP (IAR/MSP430). Как правильно прикрутить проект к FreeRTOS ? По-сути, прокт ++ не использует, только структуры и расширения синтаксиса. В таком случае может следует переписать все с CPP на C ? Изменено 15 декабря, 2015 пользователем k155la3 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 60 16 декабря, 2015 Опубликовано 16 декабря, 2015 · Жалоба В таком случае может следует переписать все с CPP на C ? Переписывать ничего не нужно. Сначала полезные статьи Курниц А. Операционная система FreeRTOS, а здесь про FreeRTOS и Си++. Моё видение следующее: добавить директорию с ОС к проекту. В настройках компилятора указать компиляцию по расширению файлов. Таким образом ОС компилируется сишным, а всё остальное си++-ным компилятором. Возможно, что можно и всё компилировать под Си++. Но у меня валится пара ошибок, разбираться не хочется. Далее. Вы создаёте задачи, и которых вызвыаете Си++ код. В этом коде можете вызывать сервисы ОС. Единственное, что при вызове кода Си++ из Си могут возникать проблемы, тогда нужно делать как-то так В хидере extern "C" int cSysClockWrapper( TSysClockType source ); В c++ коде int cSysClockWrapper( TSysClockType source ) { return CSysClock::init( source ); } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 60 16 декабря, 2015 Опубликовано 16 декабря, 2015 · Жалоба Ах, да.. забыл... нужно что-то решать с динамическим выделением памяти, если оно используется в проекте на си++. Яимею в виду new и delete. Т.к. менеджер кучи у FreeRTOS свой. Кстати, сразу рекомендую найти менеджер кучи, любезно выложенный zltigo. Над стандартным (я имею в виду из ОСи) он имеет некоторые преимущества. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
den_po 0 16 декабря, 2015 Опубликовано 16 декабря, 2015 · Жалоба Ах, да.. забыл... нужно что-то решать с динамическим выделением памяти, если оно используется в проекте на си++. Яимею в виду 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 60 16 декабря, 2015 Опубликовано 16 декабря, 2015 · Жалоба а что там, собственно, решать? На данном этапе я этого не знал. Но приведённый вами код - скорее всего решение всех проблем, в том числе и моих (сам занимаюсь этим вопросом). Сомневаюсь, что только конструкторы объектов будут выполняться. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
den_po 0 16 декабря, 2015 Опубликовано 16 декабря, 2015 · Жалоба Будут Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 26 17 декабря, 2015 Опубликовано 17 декабря, 2015 · Жалоба haker_fox, den_po спасибо за инф. и ссылки. Курница док читаю, хорошо расписано, только мало. Будем попробовать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 60 17 декабря, 2015 Опубликовано 17 декабря, 2015 · Жалоба haker_fox, den_po спасибо за инф. и ссылки. Курница док читаю, хорошо расписано, только мало. Будем попробовать. Пожалуйста! :rolleyes: Если не сложно, отпишитесь, пожалуйста, о результатах. Ибо сейчас на этом пути сам. Опыт добываю. Может быть что-то полезное для себя узнаю. Но в целом у Курница объёмная статья. Самый полный и свежий материал только на офсайте :rolleyes: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Johnny81 0 18 декабря, 2015 Опубликовано 18 декабря, 2015 · Жалоба haker_fox, о результатах чего? Если freertos + c++ - все хорошо, полет нормальный. Собственно иное было бы странно, с и с++ без проблем уживаются вместе :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 60 19 декабря, 2015 Опубликовано 19 декабря, 2015 · Жалоба haker_fox, о результатах чего? Если freertos + c++ - все хорошо, полет нормальный. Собственно иное было бы странно, с и с++ без проблем уживаются вместе :) Я в этом не сомневался! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 26 20 декабря, 2015 Опубликовано 20 декабря, 2015 · Жалоба На данном этапе я этого не знал. Но приведённый вами код - скорее всего решение всех проблем, в том числе и моих (сам занимаюсь этим вопросом). Сомневаюсь, что только конструкторы объектов будут выполняться. Сомнения, до определенной степени, крайне полезны. Проверить отработку конструкторов можно "оттрасировав" через дебагер стартап-код, который для CPP. В (IAR) опциях проекта/дебагера надо заменить стандартную метку (которая соотв-ет main), на метку стартап-кода. Но это занятие для интелектуалов - вызовы конструкторов (насколько я понял) идут косвено-таблично-списком :) По результатам оперативно не отчитаюсь, тк. сейчас надо выгонять функциональную-прикладную часть проекта ( на С) (Непомнящий Евгений @ Dec 18 2015, 13:18) haker_fox, о результатах чего? Если freertos + c++ - все хорошо, полет нормальный. Собственно иное было бы странно, с и с++ без проблем уживаются вместе В общем-то, ДА. Судя по включениям в h-файлы freeRTOS #ifdef __cplusplus extern "C" { #endif Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
den_po 0 20 декабря, 2015 Опубликовано 20 декабря, 2015 · Жалоба Сомнения, до определенной степени, крайне полезны. Проверить отработку конструкторов можно "оттрасировав" через дебагер стартап-код, который для CPP. Это если речь о конструкторах глобальных объектов или статических членов классов. А выше разговор шёл об использовании new. В (IAR) опциях проекта/дебагера надо заменить стандартную метку (которая соотв-ет main), на метку стартап-кода. Обычно достаточно снять галочку возле "main" Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 60 21 декабря, 2015 Опубликовано 21 декабря, 2015 · Жалоба Обычно достаточно снять галочку возле "main" Или в конструктор вставить printf, т.к. у меня нет дебаггера, если имеется в виду железный :rolleyes: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться