Спасибо.STC wrote:Еще замечания и дополнения:
- функцию stpatt_dir нужно вызывать перед stpmot_run(), а не после (опять таки если по аналогии с моей);
Во вложении правильно это сделано или нужно сделать как я исправил в предыдущем своём сообщении?
Спасибо.STC wrote:Еще замечания и дополнения:
- функцию stpatt_dir нужно вызывать перед stpmot_run(), а не после (опять таки если по аналогии с моей);
Code: Select all
switch(state)
{
case 0:
...
case 1:
...
}
Компилятор делает следующим образом. Если количество case не превышает нескольких штук (например 3...5), то просто последовательно сравниваются значения, если кол-во case больше, то формируется таблица переходов, индексом в которой является значение case. IAR особенно хорош.Т.е подпрограмма работает быстрей, хотя может и не смысла в этом.
Знаю что такое же есть на СИ и IAR умеет так компилировать, но как это написать на СИ увы не знаю((
Code: Select all
void gasdos_control(struct ecudata_t* d)
{
if (!stpatt_is_busy()) //проверка занятости ШД, если свободен, то делаем проверку условий.
{
if (d->sens.frequen > 1100) && (d->sens.temperat > TEMPERATURE_MAGNITUDE(70.0)) && (d->sens.carb != 0) //проверка выполнения условий
{
if (d->sens.add_i1 < VOLTAGE_MAGNITUDE(0.1)) //если смесь бедная, то открываем ШД на 3%
{
stpatt_dir(ATT_DIR_CW);
stpatt_run(ATT_STEP >> 5);
return;
}
else if (d->sens.add_i1 > VOLTAGE_MAGNITUDE(0.8)) //если смесь богатая, то закрываем ШД на 3%
{
stpatt_dir(ATT_DIR_CCW);
stpatt_run(ATT_STEP >> 5);
return;
}
}
}
else
{
return;
}
Делайте по аналогии 1:1, copy-pasteЯ так понимаю, что нужно будет ещё делать реализацию управления шаговым двигателем как ты сделал в SMCONTROL и ещё много чего. И похоже что сами мы это не осилим.
Абалдеть, не знал.STC wrote:Компилятор делает следующим образом. Если количество case не превышает нескольких штук (например 3...5), то просто последовательно сравниваются значения, если кол-во case больше, то формируется таблица переходов, индексом в которой является значение case. IAR особенно хорош.Т.е подпрограмма работает быстрей, хотя может и не смысла в этом.
Знаю что такое же есть на СИ и IAR умеет так компилировать, но как это написать на СИ увы не знаю((
Да, только названия переменных и функций поменяй. Все 1:1. И не забудь внести изменения в файле vstimer.c (смотри #ifdef SM_CONTROL)alvikagal wrote:Сделать копию файла smcontrol и внести в нём изменения и назвать его по-другому или в один файл всё скопировать лучше?