Полная версия этой страницы:
типы данных С# (AVR Studio 6)
Navovvol
Jul 13 2013, 18:20
День добрый.
пользуюсь AVR Studio 6. возникла необходимость передать целое значение из переменной типа Float в переменную типа INT16. И наоборот передать значение переменной типа INT16 в переменную типа FLOAT. Раньше как-то это делал, но никак не могу вспомнить и найти не могу.
P.S. И еще вопрос по AVR Studio 6 как выключить проверку орфографии в комментах. А то он все русские слова подчеркивает, достал.
Самое простое:
int A;
float B;
A = (float)B;
B = (int)A;
_Артём_
Jul 13 2013, 19:22
Цитата(Navovvol @ Jul 13 2013, 21:20)

P.S. И еще вопрос по AVR Studio 6 как выключить проверку орфографии в комментах. А то он все русские слова подчеркивает, достал.
Пункт меню VAssistX > Visual Assist X Options >
Нажмите для просмотра прикрепленного файлаУберите птичку или добавляйте в словарь, учите его русскому.
andries5
Jul 13 2013, 19:24
Цитата(Navovvol @ Jul 13 2013, 21:20)

P.S. И еще вопрос по AVR Studio 6 как выключить проверку орфографии в комментах. А то он все русские слова подчеркивает, достал.
В меню - VAssistX - Visual Assist X Options - Advasend - Underlines - убрать галочку на - Underlines spelling errors in comments .. -
Navovvol
Jul 15 2013, 05:12
Спасибо. разобрался.
Navovvol
Jul 15 2013, 13:09
И еще вопрос по стуктурам и их передаче функциям. чет ничего не хочет считаться
Как корректно передать переменную типа struct в функцию ?
а разве самый тупой способ не проходит?
Код
float source = 3.14;
int dest = source; // здесь dest == 3;
float dest2 = dest; // здесь dest2 = 3.0
и по поводу структур:
Код
typedef struct{
// тут что нужно
} my_struct_type;
void foo(my_struct_type var);
хотя более оптимально, наверное, будет передавать параметр в функцию по указателю
Код
void foo(my_struct_type *ptr);
Непомнящий Евгений
Jul 16 2013, 06:23
а причем тут C#? Студия уже позволяет компилировать шарп для авр-ок?

ЗЫ Если все таки имелся в виду С(++), то сильно рекомендую почитать книжку...
muravei
Jul 16 2013, 06:54
Цитата(Непомнящий Евгений @ Jul 16 2013, 10:23)

а причем тут C#? Студия уже позволяет компилировать шарп для авр-ок?

Тоже интересно.
Краем глаза глянул в инструкцию, что- то там про интеграцию в Вижуал студию , и не только про С#, но и про Бэйсик !
vladimir_orl
Jul 16 2013, 07:36
А подскажите, какие типы по скорости бывают. К примеру, код:
Код
m_camera_byte <<= 1;
m_lens_byte <<= 1;
требует в AVR Studio5 на выполнение 40 тактов.
Типы объявлял и как volatile unsigned char и как просто unsigned char. Почему-то компилятор упорно хранит из в ОЗУ. Пытался объявить их как register, компилятор ругается, что не знает такого типа.
Navovvol
Jul 16 2013, 07:58
Цитата(ARV @ Jul 15 2013, 19:30)

а разве самый тупой способ не проходит?
Спс. Лучше конечно работать по указателям. У меня проблема была внутри самой функции. Путаница с "->" и "*". Привожу работоспособный пример:
CODE
typedef struct
{
int16_t INPUT; //Number to include in average
int16_t CurIndex;// Position in Buf in which to store In
int16_t BufSize; //Maximum number of elements to include in average
int32_t Buf; // Array to store In values/ Not Array. Sum
int16_t OUTPUT; //Calculation result
bool Q; //Calculation completed flag
}MovAve;
void Moving_Average(MovAve* AVERAGE)// функция Скользящего среднего.
{
if ((AVERAGE->CurIndex)<(AVERAGE->BufSize))
{
AVERAGE->Buf+=AVERAGE->INPUT;
AVERAGE->CurIndex++;
AVERAGE->OUTPUT=(AVERAGE->Buf)/(AVERAGE->CurIndex);
if (AVERAGE->CurIndex==(AVERAGE->BufSize))
{
AVERAGE->CurIndex=0;
AVERAGE->Buf=0;
AVERAGE->Q=true;
}
else
{
AVERAGE->Q=false;
}
}
}
MovAve Sensor;
в цикле программы вызов функции:
Код
Moving_Average(&Sensor);
Цитата(vladimir_orl @ Jul 16 2013, 11:36)

А подскажите, какие типы по скорости бывают. К примеру, код:
Код
m_camera_byte <<= 1;
m_lens_byte <<= 1;
требует в AVR Studio5 на выполнение 40 тактов.
Типы объявлял и как volatile unsigned char и как просто unsigned char. Почему-то компилятор упорно хранит из в ОЗУ. Пытался объявить их как register, компилятор ругается, что не знает такого типа.
оптимизация включена? сдвиг любого чара на 1 бит 40 тактов не должен требовать.
vladimir_orl
Jul 16 2013, 09:46
Нет, оптимизацию не включал. Когда включаю, быстрее работает. Но в дебагере при этом строки сдвигаются, нет возможности пошаговой отладки. Или это надо настройки какие-то ставить. Если знаете, подскажите.
Как я понимаю, в AVR студии по умолчанию переменные в ОЗУ хранятся. И такты тратятся на их извлечение из ОЗУ, обработку, и запихивание обратно. Помню, переменные как-то можно register объявить. Чтобы всегда в регистрах были. Тем более что их не очень много (около 20).
с регистровыми переменными далеко не все так просто, как кажется. вы наверняка пользуетесь какими-то библиотеками - вы уверены, что эти библиотеки не попортят ваши "стационарно выделенные регистры"? в AVR-GCC регистровая переменная объявляется просто register uint8_t var asm("r5"); но обычно компилятор совсем не плохо "догадывается", куда переменную поместить для получения наилучшего результата (при включенной оптимизации, разумеется). лучше сосредоточтесь на качестве исходника и включите оптимизацию.
Сергей Борщ
Jul 16 2013, 10:30
QUOTE (vladimir_orl @ Jul 16 2013, 11:46)

Нет, оптимизацию не включал.
Даже и не знаю - смеяться или плакать...
vladimir_orl
Jul 16 2013, 10:38
Спасибо. Там код-то всего - 100 строчек. Программная реализация модифицированного SPI интерфейса. Попробую.
И опять-таки остаётся проблемка. При включенной оптимизации в дебагере сдвигаются строки.
Цитата(vladimir_orl @ Jul 16 2013, 14:38)

И опять-таки остаётся проблемка. При включенной оптимизации в дебагере сдвигаются строки.
это потому, что компилятор делает пятком команд то, на что вы потратили 10 строк программы, в результате уже не всегда возможно догадаться, какой строке программы соответствует так или иная команда ассемблера. у некоторых после включения оптимизации все вообще перестает работать
vladimir_orl
Jul 16 2013, 11:12
Включил максимальную оптимизацию - всё заработало. Да, похоже на будущее придётся ассемблер вспоминать.
Всем спасибо за помощь.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.