NodeJS, асинхронная последовательная запись и обработка сообщений
Я борюсь с последовательной связью в узле JS. Я использую функцию записи из этой библиотеки, которая является асинхронной.
Итак, подведем итог моего кода:
const SERIAL_INTERVAL = 1; //as fast as possible
var raspi = require('raspi');
var Serial = require('raspi-serial').Serial;
var ci = require('correcting-interval');
var datas = [];
raspi.init(function() {
serial = new Serial();
serial.open(function() {
process.send({SS: 'ready'});
process.on('message', function(m) {
if (m.datas) { //new incoming data from main process
datas = m.datas;
}
});
ci.setCorrectingInterval(function() {
if(datas.length>0){
serial.write(datas[dataIndex].data)
dataIndex++;
dataIndex = dataIndex%datas.length;
}, SERIAL_INTERVAL);
Сообщения поступают из основного процесса и представляют собой большой массив из 45 * 4-байтовых массивов. При вызове serial возвращается 4-байтовый массив, отправленный основным процессом. Когда последовательный порт поступает в HC12 (RF-модуль), предполагается, что процесс будет продолжать отправлять одни и те же данные навсегда, чтобы иметь дело с непереданными пакетами.
serial.write (Данные [dataIndex].data)
Все это прекрасно работает, за исключением того, что оно ускоряет рост памяти и задержка между отправкой новых команд процессу и их последовательной передачей является худшей и худшей. Приложение должно быть в реальном времени, поэтому оно довольно плохое. Если я увеличу задержку интервала, переданного setInterval
выглядит лучше, но не реагирует вообще. Мы попытались setCorrectingInterval
без лучших результатов.
У кого-нибудь есть предложение разобраться с этим?