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

 
 
5 страниц V  < 1 2 3 4 5 >  
Reply to this topicStart new topic
> вопросы по IAR, В поисках идеального компилятора
andrvisht
сообщение Nov 2 2005, 12:01
Сообщение #31


Местный
***

Группа: Свой
Сообщений: 298
Регистрация: 29-08-05
Пользователь №: 8 064



2 TMX
Цитата
компилятор вообще-то компилирует каждый файл по отдельности, ничего не зная о том,какие макросы уже определены в других файлах.
Поэтому и ругается.
В файле main.c (и только в нем) должно быть определение до включения файла globals.h

Да - да - да, я как раз вчера вечером это выяснил методом проб и ошибок.
Цитата
Насчет файла globals.h в учебниках пишут прямо противоположное, я в своем стандарте оформления кода требую его использовать в виде, описанном выше.

#ifndef пишется, чтобы не было переопределения макросов в случае вложения заголовочных файлов.

вот теперь начинаю понимать, а то как-то смысл #ifndef терялся.

2 Old1
Цитата
и должно заработать  rolleyes.gif

Да спасибо, заработало. Осталось понять в чем мой просчет.
Попробую 2 варианта и тогда уже определюсь.

2 All
Извиняйте если кто пытался тоже обьяснить, но дошло только счас...

Вот перевожу свои библиотеки с AB, и возникли еще вопросы:

Первый.
В С нет сдвига через перенос. Как быть?
Я вижу 3 возможных варианта

1
например нужно сделать <a<< и проверить Carry
делаем так:
b = a;
a = a << 1;
и проверяем
if (a>b) то переноса не было
else
перенос был.
2.
второй вариант преобразовать её в int
и проверять как Carry 8 бит
3.
Вставка на асме.

1 и 2 варианты не очень нравятся за счет использования дополнительного регистра
а 3 как то не хочется так как будет потеря совместимости. Да и описание по совместимости какое-то туманное.. Что -то сказали, о чем-то умолчали....


Макросы типа __xxx вроде ненашел...

как быть в данном случае. ??

2 Вопрос.
У меня есть несколько Case()
в некоторых из них код повторяется. В асме это выглядело через rjmp
в С вроде токага безобразия лучьше не делать
Тогда опять же как лучьше.

Вижу 2 варианта
1 макросом
2 функцией
в первом случае большой код
во втором лишние call и ret, да еще сохранение в стек.
Сохранение стек можно отключить __task (наверное) но call и ret ...
или может inline rfr-nj поможет ??
Go to the top of the page
 
+Quote Post
G}{OST
сообщение Nov 2 2005, 12:23
Сообщение #32


Участник
*

Группа: Новичок
Сообщений: 48
Регистрация: 6-05-05
Пользователь №: 4 784



Цитата(&-rey @ Nov 2 2005, 16:01)
В С нет сдвига через перенос. Как быть?
*

Код
// unsigned char a;
// сдвиг влево с переносом старшего бита
if (a&0x80)
 a = (a<<1) |0x01;
else
 a <<= 1;


--------------------
cul8r!
* #ru_embedded - эмбеддерский чат
Go to the top of the page
 
+Quote Post
Виктория
сообщение Nov 2 2005, 12:35
Сообщение #33


инженер
****

Группа: Свой
Сообщений: 520
Регистрация: 19-09-05
Из: Самара
Пользователь №: 8 701



Цитата(&-rey @ Nov 2 2005, 16:01)
Вот перевожу свои библиотеки с AB, и возникли еще вопросы:

Первый.
В С нет сдвига через перенос. Как быть?
Я вижу 3 возможных варианта

1
например нужно сделать <a<< и проверить Carry
делаем так:
b = a;
a = a << 1;
и проверяем
if (a>b) то переноса не было
else
перенос был.
2.
второй вариант преобразовать её в int
и проверять как Carry 8 бит
3.
Вставка на асме.
*


4. if(a&0x80) то перенос будет

Цитата
2 Вопрос.
У меня есть несколько Case()
в некоторых из них код повторяется. В асме это выглядело через rjmp
в С вроде токага безобразия лучьше не делать
Тогда опять же как лучьше.


Можно и такую конструкцию использовать
Код
 switch(cond) {
case COND1: func1();
case COND2: func2();
case COND3: func3(); break;
case COND4: func4();
 }


При выполнении условия (cond=COND1) выполняются функции func1, func2, func3; при выполнении (cond=COND2) - func2 и func3; для (cond=COND3) - только func3 и для (cond=COND4) - func4. Вместо функций - любые операторы Си.

Согласитесь, что читабельность программы при такой конструкции значительно улучшается.
Go to the top of the page
 
+Quote Post
andrvisht
сообщение Nov 2 2005, 13:06
Сообщение #34


Местный
***

Группа: Свой
Сообщений: 298
Регистрация: 29-08-05
Пользователь №: 8 064



Цитата(G}{OST @ Nov 2 2005, 15:23)
Цитата(&-rey @ Nov 2 2005, 16:01)
В С нет сдвига через перенос. Как быть?
*

Код
// unsigned char a;
// сдвиг влево с переносом старшего бита
if (a&0x80)
 a = (a<<1) |0x01;
else
 a <<= 1;

*



Спасибо, но это не совсем то что мне сейчас надо. В этом варианте получаем вообще кольцевой сдвиг, а в asm это выглядет иначе
b7 -> Carry
b6 -> b7
b5 -> b6
b4 -> b5
...
Carry -> b0
Но у меня задача сдвинуть влево и проанализировать Carry
Go to the top of the page
 
+Quote Post
G}{OST
сообщение Nov 2 2005, 13:14
Сообщение #35


Участник
*

Группа: Новичок
Сообщений: 48
Регистрация: 6-05-05
Пользователь №: 4 784



Цитата(&-rey @ Nov 2 2005, 17:06)
Спасибо
*

Пожалуйста.


--------------------
cul8r!
* #ru_embedded - эмбеддерский чат
Go to the top of the page
 
+Quote Post
andrvisht
сообщение Nov 2 2005, 13:16
Сообщение #36


Местный
***

Группа: Свой
Сообщений: 298
Регистрация: 29-08-05
Пользователь №: 8 064



Цитата(Vic1 @ Nov 2 2005, 15:35)
Цитата(&-rey @ Nov 2 2005, 16:01)
Вот перевожу свои библиотеки с AB, и возникли еще вопросы:

Первый.
В С нет сдвига через перенос. Как быть?
Я вижу 3 возможных варианта

1
например нужно сделать <a<< и проверить Carry
делаем так:
b = a;
a = a << 1;
и проверяем
if (a>b) то переноса не было
else
перенос был.
2.
второй вариант преобразовать её в int
и проверять как Carry 8 бит
3.
Вставка на асме.
*


4. if(a&0x80) то перенос будет

Цитата
2 Вопрос.
У меня есть несколько Case()
в некоторых из них код повторяется. В асме это выглядело через rjmp
в С вроде токага безобразия лучьше не делать
Тогда опять же как лучьше.


Можно и такую конструкцию использовать
Код
 switch(cond) {
case COND1: func1();
case COND2: func2();
case COND3: func3(); break;
case COND4: func4();
 }


При выполнении условия (cond=COND1) выполняются функции func1, func2, func3; при выполнении (cond=COND2) - func2 и func3; для (cond=COND3) - только func3 и для (cond=COND4) - func4. Вместо функций - любые операторы Си.

Согласитесь, что читабельность программы при такой конструкции значительно улучшается.
*



Согласен так красивее.
Да я читал про работу swich но у меня там есть набор условий в результате которых в одном и том же case нужно либо break либо часть этого общего кода.
я думаю можно анализировать (a&0x80) и выставлять флаг какой - то свой.

Думаю можно T флаг к этому приобщить, только проверить что С его не трогает. Когда раньше дизасемблил С коды видел у С большую к нему любовь.
Go to the top of the page
 
+Quote Post
Виктория
сообщение Nov 2 2005, 13:23
Сообщение #37


инженер
****

Группа: Свой
Сообщений: 520
Регистрация: 19-09-05
Из: Самара
Пользователь №: 8 701



2 &-rey
Цитата
Да я читал про работу swich но у меня там есть набор условий в результате которых в одном и том же case нужно либо break либо часть этого общего кода.


Для этого есть другая конструкция smile.gif - if(cond) break;
Если она используется в case, то выход (break) будет из блока switch
Go to the top of the page
 
+Quote Post
Виктория
сообщение Nov 2 2005, 13:36
Сообщение #38


инженер
****

Группа: Свой
Сообщений: 520
Регистрация: 19-09-05
Из: Самара
Пользователь №: 8 701



2 &-rey, далее..
Цитата
я думаю можно анализировать (a&0x80) и выставлять флаг какой - то свой.

Думаю можно T флаг к этому приобщить, только проверить что С его не трогает. Когда раньше дизасемблил С коды видел у С большую к нему любовь.


Это не должно стать правилом excl.gif Это не есть хорошо smile.gif

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

Вообще то, для получения лучших советов выкладывайте законченные куски ассемблерных текстов, которые хотите перевести на Си (или текстовое, смысловое описание задачи, которую программируете). Не сомневаюсь, что профессионалы форума покажут Вам такие трюки smile.gif , что Вы и Си, и среду IAR гораздо быстрее (и с большим интересом) освоите.
Go to the top of the page
 
+Quote Post
andrvisht
сообщение Nov 2 2005, 14:03
Сообщение #39


Местный
***

Группа: Свой
Сообщений: 298
Регистрация: 29-08-05
Пользователь №: 8 064



да Вы правы, только сначала лучьше написать, а потом уже оптимизировать.
Совершенству нет предела...
Кроме того я писал в Algorithm Builder а вылаживать это несколько проблемно.
мелкий рисунок без лупы трудно разглядеть smile.gif
Ваши рекомендации понятны, буду совершенствоваться.
Go to the top of the page
 
+Quote Post
Old1
сообщение Nov 2 2005, 18:25
Сообщение #40


Знающий
****

Группа: Свой
Сообщений: 697
Регистрация: 26-07-05
Из: Могилев
Пользователь №: 7 095



Цитата(&-rey @ Nov 2 2005, 15:01)
В С нет сдвига через перенос. Как быть?

Попробуй так:
Код
a=a<<1;
if(SREG&1)
a|=1;
Go to the top of the page
 
+Quote Post
Old1
сообщение Nov 3 2005, 16:19
Сообщение #41


Знающий
****

Группа: Свой
Сообщений: 697
Регистрация: 26-07-05
Из: Могилев
Пользователь №: 7 095



Цитата(Old1 @ Nov 2 2005, 21:25)
Цитата(&-rey @ Nov 2 2005, 15:01)
В С нет сдвига через перенос. Как быть?

Попробуй так:
Код
a=a<<1;
if(SREG&1)
a|=1;

*


Упс, я был не прав, сдвиг через перенос правилнее сделать так:
Код
if(SREG&1)
{
   a=a<<1;
   a++;
}
else
a=a<<1;

только вот вопрос: зачем это нужно, работая с языком высокого уровня?
Go to the top of the page
 
+Quote Post
AVR
сообщение Nov 3 2005, 22:24
Сообщение #42


фанат Linux'а
*****

Группа: Свой
Сообщений: 1 353
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008



У меня IAR EW AVR 4.11A евалуэйшн версия.
В списке языков доступен лишь C. Возможно ли как-то задействовать и Embedded C++?


--------------------
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Nov 4 2005, 07:37
Сообщение #43


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(AVR @ Nov 4 2005, 01:24)
У меня IAR EW AVR 4.11A евалуэйшн версия.
В списке языков доступен лишь C. Возможно ли как-то задействовать и Embedded C++?
*

В настройках проекта General Options/Library Configurations/Library следует выбрать Normal DLIB или Full DLIB.
Главное, чтобы такие Library Files существовали. Если их нет (да и в любом случае), закачайте апдейт CPP библиотек с IARа.
Go to the top of the page
 
+Quote Post
m16
сообщение Nov 4 2005, 08:08
Сообщение #44


Местный
***

Группа: Свой
Сообщений: 242
Регистрация: 27-01-05
Пользователь №: 2 225



Цитата(IgorKossak @ Nov 4 2005, 11:37)
В настройках проекта General Options/Library Configurations/Library следует выбрать Normal DLIB или Full DLIB.
Главное, чтобы такие Library Files существовали. Если их нет (да и в любом случае), закачайте апдейт CPP библиотек с IARа.
*


Прошерстил сайт IAR апдейт ССР библиотек не нашел. Если можно поподробнее.И как правильно эти библиотеки прикрутить.Спасибо.
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Nov 4 2005, 08:15
Сообщение #45


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(m16 @ Nov 4 2005, 11:08)
Прошерстил сайт  IAR  апдейт ССР библиотек не нашел. Если можно поподробнее.И как правильно эти библиотеки прикрутить.Спасибо.
*

Скачать можно здесь, а описание как "прикрутить" - в PatchReadme.html
На здоровье.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 17th June 2025 - 06:45
Рейтинг@Mail.ru


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