Кто же спорит. Сие творение не раз уже обсуждалось и на Телесисях и в Пустыне. Статья-то древняя. Много говорят о притяжке за уши, о необходимости поправок. Но за последние несколько лет в ней ничего не прибавилось. Видать, энтузиазма у советующих (да и личного времени) хватает лишь на оценку чужого труда. И я далеко от них не ушел. Нет бы сесть, да поправить, да вынести на люд... Ан нет, поговорил - и в сторону...IfoR писал(а):Хорошая статья, только, по моему, разделы "Определение функций", "Пустые операторы", "Про оператор switch" (может "Приведение типов") притянуты за уши. По крайней мере, если ты знаешь, что делаешь. Ну а раз ты сам пишешь программу, то ты знаешь что делаешь.
Да и округлять дробные значения можно просто добавив 0.5 к округляемому, а не придумывать какие-то формулы, которые, кстати, если их упростить, дадут тот же самый результат (f = X + 0.5).
Вопросы по С/С++ (СИ)
Re: Вопросы по С/С++ (СИ)
С уважением,
Виктор.
Виктор.
- Реклама
- Chip115
- Сверлит текстолит когтями
- Сообщения: 1132
- Зарегистрирован: Пт фев 16, 2007 14:18:20
- Откуда: Новосибирск
- Контактная информация:
Re: Мелкие вопросы по МК и ПЛИС.
всем привет! 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: Вопросы по С/С++ (СИ)
Всем привет. Пишу GUI модуль для своей поделки на ARM Cortex A8. (Проц - OMAP 3430 от TI)
После плясок с бубном, научил среду CooIDE компилить под данный проц. Но на Си. Запарился описывать одинаковые объекты и распределять память между ними. Можно, но сложновато и муторно.
В связи с этим, решил использовать C++, но беда в том, что CooIDE заточен под Си. (С++ ему достался от Eclipse, но криво выпилен от туда)
Автодополнение при оформлении классов работает, но в редакторе подчёркивает, как синтаксические ошибки.
Решил переехать на другую среду, либо исправить эту. Подскажите удобную и распространённую среду, умеющую работать с данными процами.
А то, CooIDE меня грязно ругает за этот кусок кода: (Компилировать не пытался, так как мне просто надо было проверить оболочку на предмет понимания синтаксиса)
Как я понял, у вас это именованные константы. А они у вас определены где-то? А то, кажется, компилятор не понимает, что это.
После плясок с бубном, научил среду 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: Вопросы по С/С++ (СИ)
не понял. Это же перечисляемый тип enum . Тут и есть определение.
В общем почему то все, что в теле enum- игнорится (( Где собака зарыта?:(
В общем почему то все, что в теле enum- игнорится (( Где собака зарыта?:(
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
© Альберт Эйнштейн
Re: Вопросы по С/С++ (СИ)
Попробуйте описание перечисляемого типа вынести за пределы описания структуры.Chip115 писал(а):не понял. Это же перечисляемый тип enum . Тут и есть определение.
В общем почему то все, что в теле enum- игнорится (( Где собака зарыта?:(
С уважением,
Виктор.
Виктор.
- Реклама
- DX168B
- Друг Кота
- Сообщения: 4468
- Зарегистрирован: Вс янв 24, 2010 19:19:52
- Откуда: Главный Улей России (Moscow)
- Контактная информация:
Re: Мелкие вопросы по МК и ПЛИС.
Код: Выделить всё
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: Мелкие вопросы по МК и ПЛИС.
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: Вопросы по С/С++ (СИ)
Я предполагал, что у него всё уже определено. Просто тут не выложил.
Только мне тоже на понятно, за чем там enum нужно. По этому, решил поправить.
И не надо умничать!
Я бы так сделал:
Только мне тоже на понятно, за чем там 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!
Re: Вопросы по С/С++ (СИ)
прочитал в инете вот такую заметку
что значит фраза
разжуйте пожалуйста новичку ?
лучше не использовать деление,я делаю преобразование вычитанием.Так быстрее,так как МК не умеет делить и при компиляции будет большая и медленная подпрограмма. Я делаю так:
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: Вопросы по С/С++ (СИ)
Это означает, что он не имеет аппаратного математического делителя, по этому приходится извращаться программными методами деления чисел.
I am DX168B and this is my favourite forum on internet!
Re: Вопросы по С/С++ (СИ)
DX168B писал(а):н не имеет аппаратного математического делителя,
почему ?
Tell Me The Truth
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
Деление есть только в виде сдвига вправо.
Если интересно почитайте
AVR200: Multiply and Divide Routines
Если интересно почитайте
AVR200: Multiply and Divide Routines
В поисках истины человек развивается.
- IfoR
- Поставщик валерьянки для Кота
- Сообщения: 2029
- Зарегистрирован: Сб ноя 15, 2008 10:09:56
- Откуда: г. Тула
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
Места на кристалле не хватило. 
ut1wpr, ну так дай мне руль - я поправлю.
ut1wpr, ну так дай мне руль - я поправлю.
Re: Вопросы по С/С++ (СИ)
[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;
}
Тоже будет работать, т.к. определение перечисляемого типа сделано вне описания структуры.
В этом случае с программиста снимается забота о соответствии типов данных и их ширины.
С уважением,
Виктор.
Виктор.
Re: Вопросы по С/С++ (СИ)
Нет мат. сопроцессора с плавающей запятой. Реализация деления с плавучкой базируется на библиотечных функциях <math.h.>, а они зачастую написаны без особой оптимизации.FreshMan писал(а):DX168B писал(а):н не имеет аппаратного математического делителя,
почему ?
В связи с этим надо по возможности работать с целочисленной арифметикой, экономя время и размер кода.
Все сказанное не касается камней, где есть математика-на-камне.
С уважением,
Виктор.
Виктор.
Re: Вопросы по С/С++ (СИ)
Не дам. Сам часто бегаю в его поисках.IfoR писал(а):Места на кристалле не хватило.
ut1wpr, ну так дай мне руль - я поправлю.
Руль находится после применения метода проб и ошибок. Оттачивается острота соображалки - как оптимизировать этот метод, чтобы и ошибок поменьше, и проб, естественно.
С уважением,
Виктор.
Виктор.
Re: Вопросы по С/С++ (СИ)
ut1wpr писал(а):Нет мат. сопроцессора с плавающей запятой.
этот сопроцессор отсутствует во всем роде МК AVR и PIC ???
Tell Me The Truth
Re: Вопросы по С/С++ (СИ)
Ув. FreshMan.FreshMan писал(а):ut1wpr писал(а):Нет мат. сопроцессора с плавающей запятой.
этот сопроцессор отсутствует во всем роде МК AVR и PIC ???
Рекомендую обратиться непосредственно на сайты-производители этих МК. Там есть все подробности и детали. Есть и специальные средства для выбора по параметрам.
Умение работать с поиском нужных МК может пригодится вам в дальнейшем. Вы же не собираетесь всю информацию получать на форумах?
С уважением,
Виктор.
Виктор.
Re: Вопросы по С/С++ (СИ)
ut1wpr, спасибо !!!
кажись впервые встречаю такого ИНТЕЛЕГЕНТНОГО человека как Вы................., который так красиво меня послал, что аж приятно стало
кажись впервые встречаю такого ИНТЕЛЕГЕНТНОГО человека как Вы................., который так красиво меня послал, что аж приятно стало

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



