Jump to content

    
Sign in to follow this  
navovvol

типы данных С# (AVR Studio 6)

Recommended Posts

День добрый.

 

пользуюсь AVR Studio 6. возникла необходимость передать целое значение из переменной типа Float в переменную типа INT16. И наоборот передать значение переменной типа INT16 в переменную типа FLOAT. Раньше как-то это делал, но никак не могу вспомнить и найти не могу. :wacko:

 

P.S. И еще вопрос по AVR Studio 6 как выключить проверку орфографии в комментах. А то он все русские слова подчеркивает, достал.

Share this post


Link to post
Share on other sites
P.S. И еще вопрос по AVR Studio 6 как выключить проверку орфографии в комментах. А то он все русские слова подчеркивает, достал.

Пункт меню VAssistX > Visual Assist X Options >

 

post-17322-1373743320_thumb.jpg

 

 

Уберите птичку или добавляйте в словарь, учите его русскому.

Share this post


Link to post
Share on other sites
P.S. И еще вопрос по AVR Studio 6 как выключить проверку орфографии в комментах. А то он все русские слова подчеркивает, достал.

В меню - VAssistX - Visual Assist X Options - Advasend - Underlines - убрать галочку на - Underlines spelling errors in comments .. -

Share this post


Link to post
Share on other sites

И еще вопрос по стуктурам и их передаче функциям. чет ничего не хочет считаться

Как корректно передать переменную типа struct в функцию ?

Share this post


Link to post
Share on other sites

а разве самый тупой способ не проходит?

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);

Share this post


Link to post
Share on other sites

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

 

ЗЫ Если все таки имелся в виду С(++), то сильно рекомендую почитать книжку...

Share this post


Link to post
Share on other sites
а причем тут C#? Студия уже позволяет компилировать шарп для авр-ок? :)

Тоже интересно.

Краем глаза глянул в инструкцию, что- то там про интеграцию в Вижуал студию , и не только про С#, но и про Бэйсик ! :)

Share this post


Link to post
Share on other sites

А подскажите, какие типы по скорости бывают. К примеру, код:

 

            m_camera_byte <<= 1;
            m_lens_byte <<= 1;

 

требует в AVR Studio5 на выполнение 40 тактов.

 

Типы объявлял и как volatile unsigned char и как просто unsigned char. Почему-то компилятор упорно хранит из в ОЗУ. Пытался объявить их как register, компилятор ругается, что не знает такого типа.

Share this post


Link to post
Share on other sites
а разве самый тупой способ не проходит?

 

Спс. Лучше конечно работать по указателям. У меня проблема была внутри самой функции. Путаница с "->" и "*". Привожу работоспособный пример:

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);

Edited by IgorKossak
избыточное цитирование

Share this post


Link to post
Share on other sites
А подскажите, какие типы по скорости бывают. К примеру, код:

 

            m_camera_byte <<= 1;
            m_lens_byte <<= 1;

 

требует в AVR Studio5 на выполнение 40 тактов.

 

Типы объявлял и как volatile unsigned char и как просто unsigned char. Почему-то компилятор упорно хранит из в ОЗУ. Пытался объявить их как register, компилятор ругается, что не знает такого типа.

оптимизация включена? сдвиг любого чара на 1 бит 40 тактов не должен требовать.

Share this post


Link to post
Share on other sites

Нет, оптимизацию не включал. Когда включаю, быстрее работает. Но в дебагере при этом строки сдвигаются, нет возможности пошаговой отладки. Или это надо настройки какие-то ставить. Если знаете, подскажите.

 

Как я понимаю, в AVR студии по умолчанию переменные в ОЗУ хранятся. И такты тратятся на их извлечение из ОЗУ, обработку, и запихивание обратно. Помню, переменные как-то можно register объявить. Чтобы всегда в регистрах были. Тем более что их не очень много (около 20).

Share this post


Link to post
Share on other sites

с регистровыми переменными далеко не все так просто, как кажется. вы наверняка пользуетесь какими-то библиотеками - вы уверены, что эти библиотеки не попортят ваши "стационарно выделенные регистры"? в AVR-GCC регистровая переменная объявляется просто register uint8_t var asm("r5"); но обычно компилятор совсем не плохо "догадывается", куда переменную поместить для получения наилучшего результата (при включенной оптимизации, разумеется). лучше сосредоточтесь на качестве исходника и включите оптимизацию.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this