我试图从 JavaScript->Firebreath->Serial 端口项目中尽可能地挤出最佳性能。本质上,我的 JavaScript 代码非常快速地将字符串传递给 Firebreath 插件(每个命令之间 40-100 毫秒),然后将这些字符串转发到串行端口。
虽然一切正常,但偶尔会丢失字符串或串行端口冻结并且必须重置。我已经验证它不是我正在使用的硬件设备,并且怀疑问题可能存在于这些功能中。有什么建议可以优化从 JavaScript 接收字符串(例如:“Sc48E”)、将其解析为 char(不幸的是这是必需的)并将其发送到串行端口的速度吗?
感谢您的输入!
使用 jUART:https ://github.com/billhsu/jUART
C++ 代码:
串行API.h
void sendmulti(const std::string& msg)
{
io.post(boost::bind(&SerialAPI::do_multi_send, this, msg));
}
void do_multi_send(const std::string& msg);
串行API.cpp
void SerialAPI::do_multi_send(const std::string& msg)
{
bool write_in_progress = !send_msg.empty(); // is there anything currently being written?
char cMsg[5]; // max length of incoming packets
for(int i = 0; i < sLength; i++) {
cMsg[i] = msg[i];
send_msg.push_back(cMsg[i]); // store in write buffer; this function requires a char
}
if (!write_in_progress) // if nothing is currently being written, then start
send_multi_start();
}
void SerialAPI::send_multi_start(void)
{
boost::asio::async_write(serial,
boost::asio::buffer(&send_msg.front(), 5),
boost::bind(&SerialAPI::send_multi_complete,
this,
boost::asio::placeholders::error));
}
记录信息
我在 SerialAPI.h 中添加了日志记录:
void sendmulti(const std::string& msg)
{
io.post(boost::bind(&SerialAPI::do_multi_send, this, msg));
FBLOG_TRACE("sendmulti()", "SerialAPI.h--sendmulti() works");
}
...在 SerialAPI.cpp 中:
void SerialAPI::do_multi_send(const std::string& msg)
{
bool write_in_progress = !send_msg.empty(); // is there anything currently being written?
const char *cMsg = msg.c_str();
// logging
FBLOG_TRACE("do_multi_send()", "debug cMsg: " << cMsg);
for(int i = 0; i < 5; i++) {
send_msg.push_back(cMsg[i]); // store in write buffer
}
if (!write_in_progress) // if nothing is currently being written, then start
send_multi_start();
}
这是我得到的最小输出:
31 [2756] INFO FireBreath <> - ..\..\..\..\src\PluginAuto\Win\np_winmain.cpp:29 - NP_Initialize - Initialization done
34 [2756] INFO FireBreath <> - ..\..\src\NpapiCore\NpapiPluginModule_NPP.cpp:150 - FB::Npapi::NpapiPluginModule::NPP_New - NPP_New: 02F60E30
37 [2756] INFO FireBreath <> - ..\..\src\PluginCore\PluginCore.cpp:40 - FB::PluginCore::setPlatform - os: 00D2E8B0; browser: NPAPI
85 [2756] INFO FireBreath <> - ..\..\src\NpapiCore\NpapiPluginModule_NPP.cpp:208 - FB::Npapi::NpapiPluginModule::NPP_Destroy - NPP_Destroy: 02F60E30
15338 [2756] INFO FireBreath <> - ..\..\src\NpapiCore\NpapiPluginModule_NPP.cpp:150 - FB::Npapi::NpapiPluginModule::NPP_New - NPP_New: 02F60EB0
15340 [2756] INFO FireBreath <> - ..\..\src\PluginCore\PluginCore.cpp:40 - FB::PluginCore::setPlatform - os: 00D2E8B0; browser: NPAPI
好像我已经把所有东西都设置好了?
另一方面,我无法终生调试该应用程序。我已经按照我可以找到的所有步骤在 Windows 上调试 Chrome,选择了正确的进程,设置了断点,它们实际上在 VS2010 中处于活动状态,但是当我运行应用程序或发送函数时,它们没有命中。
谢谢!