Вопросы по С/С++ (СИ)

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
ut1wpr
Вымогатель припоя
Сообщения: 581
Зарегистрирован: Ср янв 05, 2011 10:03:18

Re: Вопросы по С/С++ (СИ)

Сообщение ut1wpr »

IfoR писал(а):Хорошая статья, только, по моему, разделы "Определение функций", "Пустые операторы", "Про оператор switch" (может "Приведение типов") притянуты за уши. По крайней мере, если ты знаешь, что делаешь. Ну а раз ты сам пишешь программу, то ты знаешь что делаешь. :)
Да и округлять дробные значения можно просто добавив 0.5 к округляемому, а не придумывать какие-то формулы, которые, кстати, если их упростить, дадут тот же самый результат (f = X + 0.5). :)
Кто же спорит. Сие творение не раз уже обсуждалось и на Телесисях и в Пустыне. Статья-то древняя. Много говорят о притяжке за уши, о необходимости поправок. Но за последние несколько лет в ней ничего не прибавилось. Видать, энтузиазма у советующих (да и личного времени) хватает лишь на оценку чужого труда. И я далеко от них не ушел. Нет бы сесть, да поправить, да вынести на люд... Ан нет, поговорил - и в сторону... :)
С уважением,
Виктор.
Реклама
Аватара пользователя
Chip115
Сверлит текстолит когтями
Сообщения: 1132
Зарегистрирован: Пт фев 16, 2007 14:18:20
Откуда: Новосибирск
Контактная информация:

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Chip115 »

всем привет! IAR ругается на одно место, но не могу понять что не так?
Помогите разобраться :)

Код: Выделить всё

struct
{
   
    tCANMsgObject MsgObjectRx;
    tCANMsgObject MsgObjectTx;
    unsigned char pucBufferRx[CAN_FIFO_SIZE];
    unsigned char pucBufferTx[CAN_FIFO_SIZE];
    unsigned long ulBytesRemaining;
    unsigned long ulBytesTransmitted;
    enum
    {
        CAN_IDLE,
        CAN_SENDING,
        CAN_WAIT_RX,
        CAN_PROCESS,
    } eState;
} g_sCAN;

бла бла бла

int main ()
{
     бла бла бла

 
    // Set the initial state to idle.
    g_sCAN.eState = CAN_IDLE;    // тут мне ИАР и говорит, мол Error[Pe020]: identifier "CAN_IDLE" is undefined


бла бла бла
}
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
Реклама
Аватара пользователя
DX168B
Друг Кота
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение DX168B »

Всем привет. Пишу GUI модуль для своей поделки на ARM Cortex A8. (Проц - OMAP 3430 от TI)
После плясок с бубном, научил среду CooIDE компилить под данный проц. Но на Си. Запарился описывать одинаковые объекты и распределять память между ними. Можно, но сложновато и муторно.
В связи с этим, решил использовать C++, но беда в том, что CooIDE заточен под Си. (С++ ему достался от Eclipse, но криво выпилен от туда)
Автодополнение при оформлении классов работает, но в редакторе подчёркивает, как синтаксические ошибки.

Решил переехать на другую среду, либо исправить эту. Подскажите удобную и распространённую среду, умеющую работать с данными процами.
А то, CooIDE меня грязно ругает за этот кусок кода: (Компилировать не пытался, так как мне просто надо было проверить оболочку на предмет понимания синтаксиса)

Код: Выделить всё

class test{
private:
   int x, y;
public:
   test(){x=0;y=0;}
   void set_x(int a){x=a;}
   void set_y(int b){y=b;}
   int get_x(void){return x;}
   int get_y(void){return y;}
   ~test(){}
};



Chip115 писал(а):******* Помогите разобраться :) ***********

Код: Выделить всё

        CAN_IDLE,
        CAN_SENDING,
        CAN_WAIT_RX,
        CAN_PROCESS,

Как я понял, у вас это именованные константы. А они у вас определены где-то? А то, кажется, компилятор не понимает, что это.
I am DX168B and this is my favourite forum on internet!
Аватара пользователя
Chip115
Сверлит текстолит когтями
Сообщения: 1132
Зарегистрирован: Пт фев 16, 2007 14:18:20
Откуда: Новосибирск
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение Chip115 »

не понял. Это же перечисляемый тип enum . Тут и есть определение.
В общем почему то все, что в теле enum- игнорится (( Где собака зарыта?:(
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
Реклама
Эиком - электронные компоненты и радиодетали
ut1wpr
Вымогатель припоя
Сообщения: 581
Зарегистрирован: Ср янв 05, 2011 10:03:18

Re: Вопросы по С/С++ (СИ)

Сообщение ut1wpr »

Chip115 писал(а):не понял. Это же перечисляемый тип enum . Тут и есть определение.
В общем почему то все, что в теле enum- игнорится (( Где собака зарыта?:(
Попробуйте описание перечисляемого типа вынести за пределы описания структуры.
С уважением,
Виктор.
Реклама
Аватара пользователя
DX168B
Друг Кота
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)
Контактная информация:

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение DX168B »

Код: Выделить всё

   enum
    {
        CAN_IDLE,
        CAN_SENDING,
        CAN_WAIT_RX,
        CAN_PROCESS,
    } eSt;

struct
{
   
    tCANMsgObject MsgObjectRx;
    tCANMsgObject MsgObjectTx;
    unsigned char pucBufferRx[CAN_FIFO_SIZE];
    unsigned char pucBufferTx[CAN_FIFO_SIZE];
    unsigned long ulBytesRemaining;
    unsigned long ulBytesTransmitted;
 eSt eState;

} g_sCAN;

бла бла бла

int main ()
{
     бла бла бла

 
    // Set the initial state to idle.
    g_sCAN.eState = CAN_IDLE;    // тут мне ИАР и говорит, мол Error[Pe020]: identifier "CAN_IDLE" is undefined


бла бла бла
}

Бо Ваше перечисление типов живёт только внутри структуры, а за её пределами ::::: undefined.
I am DX168B and this is my favourite forum on internet!
Реклама
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение vitalik_1984 »

DX168B писал(а):

Код: Выделить всё


  
//Set the initial state to idle.
    
g_sCAN.eState CAN_IDLE;    // тут мне ИАР и говорит, мол Error[Pe020]: identifier "CAN_IDLE" is undefined 

 

Бо Ваше перечисление типов живёт только внутри структуры, а за её пределами ::::: undefined.


Блин что за значение по вашему стоит за CAN_IDLE?
Делайте себе жизнь проще-Это же КОНСТАНТА т.е. ЦИФРА так присвойте ей значение.

Код: Выделить всё

#define CAN_IDLE 1
#define CAN_SENDING 2
#define CAN_WAIT_RX 3
 #define CAN_PROCESS 4
 
В поисках истины человек развивается.
Аватара пользователя
DX168B
Друг Кота
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение DX168B »

Я предполагал, что у него всё уже определено. Просто тут не выложил.
Только мне тоже на понятно, за чем там enum нужно. По этому, решил поправить.

И не надо умничать!
Я бы так сделал:

Код: Выделить всё

#define CAN_IDLE 1
#define CAN_SENDING 2
#define CAN_WAIT_RX 3
 #define CAN_PROCESS 4

struct g_sCAN
{
    tCANMsgObject MsgObjectRx;
    tCANMsgObject MsgObjectTx;
    unsigned char pucBufferRx[CAN_FIFO_SIZE];
    unsigned char pucBufferTx[CAN_FIFO_SIZE];
    unsigned long ulBytesRemaining;
    unsigned long ulBytesTransmitted;
   unsigned char eState;
};


int main ()
{
     бла бла бла
 
    // Set the initial state to idle.
    g_sCAN.eState = CAN_IDLE;

}
Последний раз редактировалось DX168B Сб мар 10, 2012 18:34:18, всего редактировалось 2 раза.
I am DX168B and this is my favourite forum on internet!
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Re: Вопросы по С/С++ (СИ)

Сообщение FreshMan »

прочитал в инете вот такую заметку
лучше не использовать деление,я делаю преобразование вычитанием.Так быстрее,так как МК не умеет делить и при компиляции будет большая и медленная подпрограмма. Я делаю так:

void Decoder(unsigne d int DataForLed)
{
unsigned char Num1=0, Num2=0, Num3=0;
while (DataForLed >= 100)
{
DataForLed -= 100;
Num1++;
}
while (DataForLed >= 10)
{
DataForLed -= 10;
Num2++;
}
Num3 = DataForLed ;

ByDisplay[2] =Num1;
ByDisplay[1] =Num2;
ByDisplay[0] =Num3;
}


что значит фраза
МК не умеет делить

разжуйте пожалуйста новичку ?
Tell Me The Truth
Аватара пользователя
DX168B
Друг Кота
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение DX168B »

Это означает, что он не имеет аппаратного математического делителя, по этому приходится извращаться программными методами деления чисел.
I am DX168B and this is my favourite forum on internet!
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Re: Вопросы по С/С++ (СИ)

Сообщение FreshMan »

DX168B писал(а):н не имеет аппаратного математического делителя,

почему ?
Tell Me The Truth
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение vitalik_1984 »

Деление есть только в виде сдвига вправо.
Если интересно почитайте
AVR200: Multiply and Divide Routines
В поисках истины человек развивается.
Аватара пользователя
IfoR
Поставщик валерьянки для Кота
Сообщения: 2029
Зарегистрирован: Сб ноя 15, 2008 10:09:56
Откуда: г. Тула
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение IfoR »

Места на кристалле не хватило. :))

ut1wpr, ну так дай мне руль - я поправлю. :)
Изображение
/dev/urandom - гигабайты информации.

OS: openSUSE 13.2 (x86_64)
ut1wpr
Вымогатель припоя
Сообщения: 581
Зарегистрирован: Ср янв 05, 2011 10:03:18

Re: Вопросы по С/С++ (СИ)

Сообщение ut1wpr »

[quote="DX168B"]
Си нас ни в чем не ограничивает. Можно определить новый тип данных:

Код: Выделить всё

typedef enum{
  CAN_IDLE,
  CAN_SENDING,
  CAN_WAIT_RX,
  CAN_PROCESS
} state;

struct g_sCAN{
    [skip]
    state eState;
};

int main (){
    [skip]
    // Set the initial state to idle.
    g_sCAN.eState = CAN_IDLE;
}

Тоже будет работать, т.к. определение перечисляемого типа сделано вне описания структуры.
В этом случае с программиста снимается забота о соответствии типов данных и их ширины.
С уважением,
Виктор.
ut1wpr
Вымогатель припоя
Сообщения: 581
Зарегистрирован: Ср янв 05, 2011 10:03:18

Re: Вопросы по С/С++ (СИ)

Сообщение ut1wpr »

FreshMan писал(а):
DX168B писал(а):н не имеет аппаратного математического делителя,

почему ?
Нет мат. сопроцессора с плавающей запятой. Реализация деления с плавучкой базируется на библиотечных функциях <math.h.>, а они зачастую написаны без особой оптимизации.
В связи с этим надо по возможности работать с целочисленной арифметикой, экономя время и размер кода.
Все сказанное не касается камней, где есть математика-на-камне. :)
С уважением,
Виктор.
ut1wpr
Вымогатель припоя
Сообщения: 581
Зарегистрирован: Ср янв 05, 2011 10:03:18

Re: Вопросы по С/С++ (СИ)

Сообщение ut1wpr »

IfoR писал(а):Места на кристалле не хватило. :))

ut1wpr, ну так дай мне руль - я поправлю. :)
Не дам. Сам часто бегаю в его поисках. :)
Руль находится после применения метода проб и ошибок. Оттачивается острота соображалки - как оптимизировать этот метод, чтобы и ошибок поменьше, и проб, естественно.
:)
С уважением,
Виктор.
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Re: Вопросы по С/С++ (СИ)

Сообщение FreshMan »

ut1wpr писал(а):Нет мат. сопроцессора с плавающей запятой.

этот сопроцессор отсутствует во всем роде МК AVR и PIC ???
Tell Me The Truth
ut1wpr
Вымогатель припоя
Сообщения: 581
Зарегистрирован: Ср янв 05, 2011 10:03:18

Re: Вопросы по С/С++ (СИ)

Сообщение ut1wpr »

FreshMan писал(а):
ut1wpr писал(а):Нет мат. сопроцессора с плавающей запятой.

этот сопроцессор отсутствует во всем роде МК AVR и PIC ???
Ув. FreshMan.
Рекомендую обратиться непосредственно на сайты-производители этих МК. Там есть все подробности и детали. Есть и специальные средства для выбора по параметрам.
Умение работать с поиском нужных МК может пригодится вам в дальнейшем. Вы же не собираетесь всю информацию получать на форумах? :)
С уважением,
Виктор.
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Re: Вопросы по С/С++ (СИ)

Сообщение FreshMan »

ut1wpr, спасибо !!! :))
кажись впервые встречаю такого ИНТЕЛЕГЕНТНОГО человека как Вы................., который так красиво меня послал, что аж приятно стало :beer:
Tell Me The Truth
ut1wpr
Вымогатель припоя
Сообщения: 581
Зарегистрирован: Ср янв 05, 2011 10:03:18

Re: Вопросы по С/С++ (СИ)

Сообщение ut1wpr »

FreshMan писал(а):ut1wpr, спасибо !!! :))
кажись впервые встречаю такого ИНТЕЛЕГЕНТНОГО человека как Вы................., который так красиво меня послал, что аж приятно стало :beer:

Я не преследовал плохих целей. Я уже не в том возрасте, когда "посылают". Лишь ограничился советом. Если трудно с поискам по сайту, то Гугл на сочетание трех ключевых слов "avr math coprocessor" выдал много интересного. Но, увы, это был ваш вопрос, не мой. Выходит, я все-таки выполнил вашу работу. Поверьте, меня это не напрягло. Но ведь всегда так не будет, у меня уже березка на горизонте... :(
Вот один из результатов помощи дядьки Гугла.
http://www.atmel.com/Images/doc32002.pdf
С уважением,
Виктор.
Ответить

Вернуться в «Разные вопросы по МК»