Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Какой способ быстрее?
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Jenya7
Я могу задать переменные скажем вот так:
Код
uint16_t max_current1, max_current2, max_current3;

И затем обработать команду в теринале:
CODE
//get/set motor max current---------------------------------------------------
else if(strcmp(command,"imax")==0)
{
argument1 = strtok (NULL, " ");
if(argument1 == NULL)
{
UsartSendString("missing argument\r");
}
else
{
argument2 = strtok (NULL, " ");
if(argument2 == NULL)
{
switch(atoi(argument1))
{
case 1: UsartSendInt("", max_current1);
break;
case 2: UsartSendInt("", max_current2);
break;
case 3: UsartSendInt("", max_current3);
break;
default: UsartSendString("invalid axis\r");
break;
}
}
else
{
uint16_t max_cur = atoi(argument2);
switch(atoi(argument1))
{
case 1:
if(max_cur < MAX_CUR1)
{
//max_current1 = max_cur;
EE_WriteVariable(101,max_cur);
}
else
UsartSendString("overlimit\r");
break;
case 2:
if(max_cur < MAX_CUR2)
//max_current2 = max_cur;
EE_WriteVariable(102,max_cur);
else
UsartSendString("overlimit\r");
break;
case 3:
if(max_cur < MAX_CUR3)
//max_current3 = max_cur;
EE_WriteVariable(103,max_cur);
else
UsartSendString("overlimit\r");
break;
default:
UsartSendString("invalid axis\r");
break;
}
}
}
}


Или я могу объявить переменные как массив:
Код
uint16_t max_current[3];

И затем:
CODE
else if(strcmp(command,"imax")==0)
{
argument1 = strtok (NULL, " ");
if(argument1 == NULL)
{ UsartSendString("missing argument\r"); }
else
{
uint16_t cur_idx = atoi(argument1);
if( cur_idx > 0 && cur_idx < 4) //valid index
{
argument2 = strtok (NULL, " ");
if(argument2 == NULL)
{
UsartSendInt("", max_current[com_idx - 1]);
}
else
{
uint32_t max_cur = atoi(argument2);
max_current [com_idx - 1] = max_cur;
}
}
else
{
UsartSendString("invalid value\r");
}
}
}


Вопрос какой из вариантов лучше? Не удивлюсь если ответ - никакой.
Golikov A.
лучше

Код
const int CURRENT_COUNT = 4;
uint16_t Current[CURRENT_COUNT];

и так далее... это лучше тем что масштабируемо, читаемо, и что еще придумаете... первый вариант - много ручной писанины. По скорости будет одно и тоже, ибо после нормального оптимизатора циклы будут развернуты, без оптимизации первый вариант будет быстрее работать, но кому это надо?
scifi
Цитата(Golikov A. @ Feb 26 2014, 10:37) *
это лучше тем что масштабируемо, читаемо, и что еще придумаете... первый вариант - много ручной писанины. По скорости будет одно и тоже, ибо после нормального оптимизатора циклы будут развернуты, без оптимизации первый вариант будет быстрее работать, но кому это надо?

+1. О скорости там вообще нет смысла говорить: пересылки через UART будут на порядки медленнее. Лучше тот вариант, который даёт более читаемый код.
Кстати, вот этот код
Код
const int CURRENT_COUNT = 4;
uint16_t Current[CURRENT_COUNT];

годится для C++, но не годится для Си. В Си такая константа традиционно сидит в макросе.
Jenya7
спасибо за ответы.


Цитата(scifi @ Feb 26 2014, 13:32) *
+1. О скорости там вообще нет смысла говорить: пересылки через UART будут на порядки медленнее. Лучше тот вариант, который даёт более читаемый код.


кстати в STM32 UART довольно шустрый я пробовал 250000 можно поднять бод на 2M.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.