Помогите оптимизировать
- Войдите на сайт для отправки комментариев
Вс, 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 в реальном времени.