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

 
 
> Проверка условия внутри функции или снаружи - как лучше.
Jenya7
сообщение Sep 28 2017, 09:58
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Сижу пару дней размышляю. Есть функции которые исполняются по условию.
Скажем если энкодер для данного мотора активирован - проверяй позицию, если не активирован - то соответственно и проверять нечего.
можно записать так
Код
case MOT_ST_RUN:

if (mot_data[mot_num].enc_num > 0)                
    MOT_PositionLoop(mot_idx);

break;

или спрятать проверку условия в функцию
Код
void MOT_PositionLoop(uint32_t mot_num)
{
    if (mot_data[mot_num].enc_num > 0)
    {
      
    }
}

и потом
Код
case MOT_ST_RUN:
      
MOT_PositionLoop(mot_idx);

break;


Вопрос как лучше?

Сообщение отредактировал Jenya7 - Sep 28 2017, 10:04
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
k155la3
сообщение Sep 28 2017, 18:55
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



Я бы сделал ф-ию более "умной", позволяющей проверять состояние энкодера даже если он отключен.
По общепринятой схеме.

static int Coordinate = 0;
RetCode = EncoderStateGet( &Coordinate, . . . . );

По коду возврата определяем, имеет ли смысл смотреть координату.
Кроме того такой подход позволяет последующее расширение функциональности, например,
выдавать "некритичные" ошибки, вроде "возможна потеря синхронизации" итп

Тут конечно, более интересно решение на ООП, энкодер+мотор==объект.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 05:55
Рейтинг@Mail.ru


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