Помогите оптимизировать
- Войдите на сайт для отправки комментариев
Вс, 18/10/2015 - 21:49
Доброго всем времени суток,
Пишу формирователь прямоугольных импульсов по сообщению с CANbus, помогите оптимизировать код.
#include <mcp_can.h>
#include <SPI.h>
long unsigned int rxId;
unsigned char len = 0;
unsigned char rxBuf[8];
int a = 0;
int b;
int input;
MCP_CAN CAN0(10);
void setup()
{
CAN0.begin(CAN_500KBPS);
pinMode(2, INPUT);
}
void loop()
{
if(!digitalRead(2))
{
CAN0.readMsgBuf(&len, rxBuf);
rxId = CAN0.getCanId();
if (rxId==0x902){
input = uint16_t(rxBuf[4]<<8 |rxBuf[5]);
int vehicleSpeed = input /100;
if (input <= 95) {
input = 0;
}
if (b != input)
{
b = input;
}
if (input > 0)
{
a = (b+50000)/b;
}
else
{
a = 0;
}
}
if (a == 0) {
digitalWrite(4, LOW);
}
else
{
digitalWrite(4, HIGH);
delay(a);
digitalWrite(4, LOW);
delay(a);
}
}
}
А что с ним не так? Что именно нужно оптимизировать и дакой степени? Кстати, Вы забыли "пожалуйста" сказать.
Ну начнём тогда с конца на начало - Пожалуйста
скажем так - не нравится то, что импульсы формираются через delay(a); - в это время всё стоит и CAN не слушается, тут как бы надо, что бы частота импульсов изменялась пропорционально input в реальном времени.