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

 
 
> еще раз об использовании СPP и uCOS
Jurdens
сообщение May 18 2007, 06:43
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 107
Регистрация: 9-07-05
Пользователь №: 6 656



Есть рабочий проект под uCOS на С
После того как я поставил в настройках проекта (среда IAR) галочку Extended Embedded C++
компилятор стал ругаться на все фрагменты содержащие строковые константы в параметрах функций
типа OSTaskNameSet(APP_TASK_START_PRIO, "Startup", &err); на параметр "Startup"
OS_StrCopy(s, "uC/OS-II: Vx.yy"); на параметр "uC/OS-II: Vx.yy"

Error[Pe167]: argument of type "char const *" is incompatible with parameter of type "INT8U *" C:\ARM\UCOS\UII\Micrium\Software\EvalBoards\NXP\LPC2138\IAR\OS-View-LCD\app.cpp 198
несоответствие типов все понятно
Но почему С компилятор не ругался ?
И что делать сейчас есть может какая директива компилятору ?
Можно конечно и так..

INT8U G1[]="Startup";
.
.
.
OSTaskNameSet(APP_TASK_GRAPHOUT_PRIO, G1, &err);

и получается
но может можно как то еще дать знать компилятору о том что INT8U* и char const *" compatibl?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
dxp
сообщение May 18 2007, 07:50
Сообщение #2


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(Jurdens @ May 18 2007, 13:43) *
Есть рабочий проект под uCOS на С
После того как я поставил в настройках проекта (среда IAR) галочку Extended Embedded C++
компилятор стал ругаться на все фрагменты содержащие строковые константы в параметрах функций
типа OSTaskNameSet(APP_TASK_START_PRIO, "Startup", &err); на параметр "Startup"
OS_StrCopy(s, "uC/OS-II: Vx.yy"); на параметр "uC/OS-II: Vx.yy"

Error[Pe167]: argument of type "char const *" is incompatible with parameter of type "INT8U *" C:\ARM\UCOS\UII\Micrium\Software\EvalBoards\NXP\LPC2138\IAR\OS-View-LCD\app.cpp 198
несоответствие типов все понятно
Но почему С компилятор не ругался ?
[...]
но может можно как то еще дать знать компилятору о том что INT8U* и char const *" compatibl?

Ваш INT8U - это, видимо, unsigned char. В С++ char, signed char и unsigned char - это три разных типа. Кроме того, Вы пытаетесь передать в функцию, принимающую аргумент INT8U*, выражение типа const char*, т.е. константное выражение. А если фукнция внутри будет менять значения, переданные по указателю? Этого делать нельзя. Почему в С режиме компилятор не ругался на это, не знаю. Выйти из положения можно, применив ручное преобразование типов. Это можно сделать, если уверены, что негативных последствий не возникнет - тут (после приведения типов) вся ответственность за правильность работы на Вас. А еще лучше, написать свою функцию-обертку, в которую поместить вызов этой функции с ручным преобразванием типа - чтобы в коде не мельтешело это преобразование. Эту функцию-оберктку объявить встраиваемой (inline), чтобы она не тащила за собой накладных расходов на вызов.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 12th August 2025 - 20:43
Рейтинг@Mail.ru


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