由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - akka能和C++程序通信吗?
相关主题
boost vs C++11嵌入式(PLC)的时区问题
C++11使用感受及一些问题为啥大家都比较python的web framework呢
用ASIO写TCP/IP,同步还是异步 ?发现ramdisk不错,多个进程通信用文件就可以了,简单
嵌入式Web有什么注意事项?有专门讲 message server performance 的资料吗
问一个思路:如何创建并监听虚拟网卡选择 WCF 还是 ASP.NET WebApi
ASIO TCP传送JSON如何知道包结束?普通TCP还是HTTP?
JSONCPP和ASIO能否联合使用(C++11)?PC 9-bit Serial Communication如何实现
ASIO异步一问现在Window下写GUI的话用什么库?
相关话题的讨论汇总
话题: java话题: 串口话题: c++话题: tcp话题: ip
进入Programming版参与讨论
1 (共1页)
b***i
发帖数: 3043
1
或者说,Java和C++进行通信最好的方式是什么?需要从Java发出信号,也需要Java获
得信息。
d****i
发帖数: 4809
2
If you don't want to have any overhead of IPC, then JNI is the best bet, or
if you don't want to write JNI wrapper function, then JNA (Java-Native-
Access) is an alternative way. Of course, there is SWIG to connect C/C++
with any other high level languages including Java:
http://www.swig.org/index.php
You may use that too. Also there are some ongoing effort by RedHat people to
make the C++<->Java bridge easier, called "Project Panama", but I haven't
tried that.

【在 b***i 的大作中提到】
: 或者说,Java和C++进行通信最好的方式是什么?需要从Java发出信号,也需要Java获
: 得信息。

b***i
发帖数: 3043
3
从C++读串口然后能通知Java吗?就是回叫?

or
to

【在 d****i 的大作中提到】
: If you don't want to have any overhead of IPC, then JNI is the best bet, or
: if you don't want to write JNI wrapper function, then JNA (Java-Native-
: Access) is an alternative way. Of course, there is SWIG to connect C/C++
: with any other high level languages including Java:
: http://www.swig.org/index.php
: You may use that too. Also there are some ongoing effort by RedHat people to
: make the C++<->Java bridge easier, called "Project Panama", but I haven't
: tried that.

w***g
发帖数: 5958
4
你干脆把你的project整个描述一遍得了。
你这么一步一步地问问题,得到的也只是局部最优解。
像你这样每一步都要来问的,你觉得你设计的架构能行吗?

【在 b***i 的大作中提到】
: 从C++读串口然后能通知Java吗?就是回叫?
:
: or
: to

z****e
发帖数: 54598
5
json
web service是最简单的
其次用vert.x的bus也行
不过麻烦不少
还有rpc之类的,以前的corba之类的
没有意义,或者你干脆直接用socket
参考swift那个socket,把两个c文件单独取出来就好了
http://github.com/swiftsocket/SwiftSocket/tree/master/SwiftSock
z****e
发帖数: 54598
6
json
web service是最简单的
其次用vert.x的bus也行
不过麻烦不少
还有rpc之类的,以前的corba之类的
没有意义,或者你干脆直接用socket
参考swift那个socket,把两个c文件单独取出来就好了
http://github.com/swiftsocket/SwiftSocket/tree/master/SwiftSock
p***o
发帖数: 1252
7
vertx3有RecordParser,写个按行传的tcp也就几行,还能用telnet调试。

【在 z****e 的大作中提到】
: json
: web service是最简单的
: 其次用vert.x的bus也行
: 不过麻烦不少
: 还有rpc之类的,以前的corba之类的
: 没有意义,或者你干脆直接用socket
: 参考swift那个socket,把两个c文件单独取出来就好了
: http://github.com/swiftsocket/SwiftSocket/tree/master/SwiftSock

z****e
发帖数: 54598
8

嗯,不错,你搞得比我深了现在
我这个功能还没试过
不过telnet那个我弄过
要启动shell service

【在 p***o 的大作中提到】
: vertx3有RecordParser,写个按行传的tcp也就几行,还能用telnet调试。
p***o
发帖数: 1252
9
没那么复杂,我是说用系统自带的telnet直接连tcp端口收发字符串调试。
以前浏览器不能inspect element又懒得tcpdump的时候用telnet调http也差不多

【在 z****e 的大作中提到】
:
: 嗯,不错,你搞得比我深了现在
: 我这个功能还没试过
: 不过telnet那个我弄过
: 要启动shell service

z****e
发帖数: 54598
10

vert.x启动一个shell service很容易的
照着做,然后可以listen bus里面的msg
还可以模拟发射msg给某个verticle
测试时候很顶用,而且支持不同的参数格式
比如-*,--*, D*,启动后就可以telnet连进去了
shell service是3.1呼声很高的一个module
以后会逐步强化这个功能,现在刚起步

【在 p***o 的大作中提到】
: 没那么复杂,我是说用系统自带的telnet直接连tcp端口收发字符串调试。
: 以前浏览器不能inspect element又懒得tcpdump的时候用telnet调http也差不多

相关主题
ASIO TCP传送JSON如何知道包结束?嵌入式(PLC)的时区问题
JSONCPP和ASIO能否联合使用(C++11)?为啥大家都比较python的web framework呢
ASIO异步一问发现ramdisk不错,多个进程通信用文件就可以了,简单
进入Programming版参与讨论
b***i
发帖数: 3043
11
Zynq CPU,十个串口,一个显示设备,320x240 24色,需要直接控制或者通过显示芯片
控制
要求,TCP/IP, 串口通信,存盘。
Java程序要进行串口的发送,和接受,TCP/IP的listen, connect, receive, send等。
还要把一个BufferedImage的内容显示到显示器,不需要各类鼠标和键盘的点击等。所
以,按钮输入想通过JNI和C++程序的GPIO查询获得。
C++程序负责向显示设备的Linux驱动程序输出,负责串口的发送和接收,并通知Java串
口数据完成。我可能每10毫秒查一次,看有没有字符输入,没有了就把所有的内容发给
Java。
Java的Modbus和TCP/IP都比较成熟,而如果用C++要用Boost.asio
同时,这些串口是在FPGA里面实现的,用Xilinx Vivado加入,目的是Linux能够控制这
些串口

【在 w***g 的大作中提到】
: 你干脆把你的project整个描述一遍得了。
: 你这么一步一步地问问题,得到的也只是局部最优解。
: 像你这样每一步都要来问的,你觉得你设计的架构能行吗?

w***g
发帖数: 5958
12
如果只是用底层的socket,串口通信,文件操作,C++和java没啥大差别,
犯不着混合编程。用C++可能更容易点。
如果网络操作想省点事,并且协议比较自由,那么在C++上用thrift或者gRPC都很方便,
错误处理也更方便。这年头不兴自己写socket了。
如果想跑一个http服务器,C++有https://github.com/datasift/served,底层用
boost.asio实现的。关键是要避免自己设计网络协议。
GPIO如果是linux的话似乎直接用标准文件操作读写设备文件就行,java和C++一样。
如果是我,不到万不得已不会上JNI。

【在 b***i 的大作中提到】
: Zynq CPU,十个串口,一个显示设备,320x240 24色,需要直接控制或者通过显示芯片
: 控制
: 要求,TCP/IP, 串口通信,存盘。
: Java程序要进行串口的发送,和接受,TCP/IP的listen, connect, receive, send等。
: 还要把一个BufferedImage的内容显示到显示器,不需要各类鼠标和键盘的点击等。所
: 以,按钮输入想通过JNI和C++程序的GPIO查询获得。
: C++程序负责向显示设备的Linux驱动程序输出,负责串口的发送和接收,并通知Java串
: 口数据完成。我可能每10毫秒查一次,看有没有字符输入,没有了就把所有的内容发给
: Java。
: Java的Modbus和TCP/IP都比较成熟,而如果用C++要用Boost.asio

d****i
发帖数: 4809
13
re, I think he's trying to use Java on Linux for embedded development. This
is the worst idea to use Java in a wrong case. Using C++ is just fine and
much more efficient and no need to use JNI. Even just use Python, PHP or
Node.js as a thin wrapper is better and light-weight than Java on embedded
system.

便,

【在 w***g 的大作中提到】
: 如果只是用底层的socket,串口通信,文件操作,C++和java没啥大差别,
: 犯不着混合编程。用C++可能更容易点。
: 如果网络操作想省点事,并且协议比较自由,那么在C++上用thrift或者gRPC都很方便,
: 错误处理也更方便。这年头不兴自己写socket了。
: 如果想跑一个http服务器,C++有https://github.com/datasift/served,底层用
: boost.asio实现的。关键是要避免自己设计网络协议。
: GPIO如果是linux的话似乎直接用标准文件操作读写设备文件就行,java和C++一样。
: 如果是我,不到万不得已不会上JNI。

T********i
发帖数: 2416
14
从你近来提问的问题来看。你还有很长一段路走。
你别把串口不当回事。你自己还一直在纠结TCP/IP。别人也都顺着你的提问回帖。
你半个月,能把串口搞清楚就不错了。串口的异步通信和TCP/IP的异步通信是一样的。
连API都一样。串口可能比TCP/IP还恶心。写一个能demo的不难。写一个能处理各种
corner case的串口应用,我甚至怀疑这个版上谁有过这种经验?

【在 b***i 的大作中提到】
: 或者说,Java和C++进行通信最好的方式是什么?需要从Java发出信号,也需要Java获
: 得信息。

d****i
发帖数: 4809
15
魏老师一看就是自己写过这个的明白人,我们以前自己写过一个完整的RS232的C的串口
程序,非常复杂,因为先是在没有OS的裸板环境下,后来用到了RTOS下面,所以各种
case处理非常复杂,最后终于有了一套通用的库,然后用C++ wrap了一下,才算正本归
元。network stack应该比串口更复杂,如果不用lib都自己写的话。

【在 T********i 的大作中提到】
: 从你近来提问的问题来看。你还有很长一段路走。
: 你别把串口不当回事。你自己还一直在纠结TCP/IP。别人也都顺着你的提问回帖。
: 你半个月,能把串口搞清楚就不错了。串口的异步通信和TCP/IP的异步通信是一样的。
: 连API都一样。串口可能比TCP/IP还恶心。写一个能demo的不难。写一个能处理各种
: corner case的串口应用,我甚至怀疑这个版上谁有过这种经验?

w***g
发帖数: 5958
16
我有一阵玩arduino,自己用max232焊过一个接口连电脑。
http://www.wdong.org/wordpress/blog/2012/07/09/max232-breakout-
确实是超级恶心,光配置个minicom都快吐了。
这年头人脸识别都很容易做了,写串口通信还是那么难,
别说异步通信了。
刚刚找了下程序,串口通信还真是用boost::asio写的, 用串口通过arduino
烧51单片机rom,程序在这里
http://www.wdong.org/wordpress/blog/2012/07/04/programming-at89
应证一下魏老师关于串口和TCP/IP连API都一样的claim。不过我那个程序只能在
天时地利人和的情况下才能运行,无法处理corner case。

【在 d****i 的大作中提到】
: 魏老师一看就是自己写过这个的明白人,我们以前自己写过一个完整的RS232的C的串口
: 程序,非常复杂,因为先是在没有OS的裸板环境下,后来用到了RTOS下面,所以各种
: case处理非常复杂,最后终于有了一套通用的库,然后用C++ wrap了一下,才算正本归
: 元。network stack应该比串口更复杂,如果不用lib都自己写的话。

d****i
发帖数: 4809
17
arduino还算好了,毕竟是Linux,要是那些RTOS的话,有些连device driver都没有现
成的要自己写。

【在 w***g 的大作中提到】
: 我有一阵玩arduino,自己用max232焊过一个接口连电脑。
: http://www.wdong.org/wordpress/blog/2012/07/09/max232-breakout-
: 确实是超级恶心,光配置个minicom都快吐了。
: 这年头人脸识别都很容易做了,写串口通信还是那么难,
: 别说异步通信了。
: 刚刚找了下程序,串口通信还真是用boost::asio写的, 用串口通过arduino
: 烧51单片机rom,程序在这里
: http://www.wdong.org/wordpress/blog/2012/07/04/programming-at89
: 应证一下魏老师关于串口和TCP/IP连API都一样的claim。不过我那个程序只能在
: 天时地利人和的情况下才能运行,无法处理corner case。

T********i
发帖数: 2416
18
我20年前就写过GPIO模拟串口的。
RTOS, MCU,Linux,Windows串口都写过。
串口恶心就在于一根线叫UART,两根线双向,增加其他I/O针脚就有RS232和485之类的
。485还是半双工。232为了当年modem设计的,有什么响铃线之类的现在的小年轻估计
很难理解。当年俺还有过电传打字机当显示器玩basic,一个list命令打印出一张纸的
神奇体验。
标准确实有。具体实现遵守多少就是另外一回事。
至于flow control,buffer,时序之类的要考虑的比TCP/IP还多。至少TCP/IP还不会丢
数据。你串口那一边要是一个蠢货写的,啥事都能发生。
写一个随便插拔,两边都能自我恢复的。比TCP/IP困难多了。大多数情况,是根本不可
能的。
b***i
发帖数: 3043
19
我们的串口比你的 简单多了 ,没有 flowcontrol, 唯一多的是 9bit,多了个地址 位
,更像嵌入式,要不然和台式机 一样 。
我们的需求是Modbus,要实现coil, input, holding等几个,而不是全部功能。
TCP/IP首先也是Modbus,然后要能够理解JSON,返回JSON。
嵌入式设备首先要跟串口通信,我觉得可以用同步,为什么要异步?多线程每隔10毫秒
看看串口的缓冲里面有多少,读进来。Modbus规定,如果有3.5个字符的时间没有输入
,说明完成。一共不到255个字符,满了就处理。而且Modbus有CRC,不符合规定就不处
理,只记录下来。
TCP/IP更是容易,Java有个Modbus TCP的库,要是C++我岂不是要重新发明轮子?连C#
用的都是Java那个。
真是不知道难在哪里。你再给个例子?

【在 T********i 的大作中提到】
: 我20年前就写过GPIO模拟串口的。
: RTOS, MCU,Linux,Windows串口都写过。
: 串口恶心就在于一根线叫UART,两根线双向,增加其他I/O针脚就有RS232和485之类的
: 。485还是半双工。232为了当年modem设计的,有什么响铃线之类的现在的小年轻估计
: 很难理解。当年俺还有过电传打字机当显示器玩basic,一个list命令打印出一张纸的
: 神奇体验。
: 标准确实有。具体实现遵守多少就是另外一回事。
: 至于flow control,buffer,时序之类的要考虑的比TCP/IP还多。至少TCP/IP还不会丢
: 数据。你串口那一边要是一个蠢货写的,啥事都能发生。
: 写一个随便插拔,两边都能自我恢复的。比TCP/IP困难多了。大多数情况,是根本不可

T********i
发帖数: 2416
20
就是这个10ms。就够我琢磨好几天的。
而且你的波特率是多少?波特率越高3.5字符的时间就越短。就算你10ms 7个字符好了
。波特率才5.6K。一夜回到40年前。

【在 b***i 的大作中提到】
: 我们的串口比你的 简单多了 ,没有 flowcontrol, 唯一多的是 9bit,多了个地址 位
: ,更像嵌入式,要不然和台式机 一样 。
: 我们的需求是Modbus,要实现coil, input, holding等几个,而不是全部功能。
: TCP/IP首先也是Modbus,然后要能够理解JSON,返回JSON。
: 嵌入式设备首先要跟串口通信,我觉得可以用同步,为什么要异步?多线程每隔10毫秒
: 看看串口的缓冲里面有多少,读进来。Modbus规定,如果有3.5个字符的时间没有输入
: ,说明完成。一共不到255个字符,满了就处理。而且Modbus有CRC,不符合规定就不处
: 理,只记录下来。
: TCP/IP更是容易,Java有个Modbus TCP的库,要是C++我岂不是要重新发明轮子?连C#
: 用的都是Java那个。

相关主题
有专门讲 message server performance 的资料吗PC 9-bit Serial Communication如何实现
选择 WCF 还是 ASP.NET WebApi现在Window下写GUI的话用什么库?
普通TCP还是HTTP?请问一下,用什么语言/库/脚本作GUI比较方便?
进入Programming版参与讨论
b***i
发帖数: 3043
21
有道理。
我也考虑过这个问题。我们10个串口的波特率是最高3600每秒,最低1200。所以基本没
有问题?
另有一个串口连RS485,同时连这十个设备,要1Mbps。这么高速度,我们就不考虑3.5
字符了。线程 里先查又没有接收到,然后立刻发送。等的时间应该够了。这个可能需
要1毫秒查一次,不知道Linux能否实现?主要是串口没有定义什么时候叫结束。要不然
结束了通知我就行了。
别问我为什么不用TCP/IP和这十个设备通信,我连串口都不想用,我就不想有这十个设
备,尽量简化,成串口设备了。主要用来调节电压的。

【在 T********i 的大作中提到】
: 就是这个10ms。就够我琢磨好几天的。
: 而且你的波特率是多少?波特率越高3.5字符的时间就越短。就算你10ms 7个字符好了
: 。波特率才5.6K。一夜回到40年前。

T********i
发帖数: 2416
22
就一个问题。你怕不怕偶尔丢数据吧?如果不怕,比如丢了可以再读一次。那就没问题。
否则,你这方法不沃克。

5

【在 b***i 的大作中提到】
: 有道理。
: 我也考虑过这个问题。我们10个串口的波特率是最高3600每秒,最低1200。所以基本没
: 有问题?
: 另有一个串口连RS485,同时连这十个设备,要1Mbps。这么高速度,我们就不考虑3.5
: 字符了。线程 里先查又没有接收到,然后立刻发送。等的时间应该够了。这个可能需
: 要1毫秒查一次,不知道Linux能否实现?主要是串口没有定义什么时候叫结束。要不然
: 结束了通知我就行了。
: 别问我为什么不用TCP/IP和这十个设备通信,我连串口都不想用,我就不想有这十个设
: 备,尽量简化,成串口设备了。主要用来调节电压的。

b***i
发帖数: 3043
23
偶尔丢了 不要紧,我们一直发呢。其实我们要求20%成功就算成功。另外,我写的C#程
序在Windows下能够用14个串口同时进行通信,1秒一次,也是正常运行了7个月。不过
,有的时候Windows有些忙,会出现错误,但是我能处理这个异常,一般几天丢掉几个。
到Linux,要求1秒能够发最多6次,每个单独控制。还有就是多了一个高速串口1Mbps。
因为考虑到Linux更可靠,没有GUI(自己的嵌入式设备是完全控制的,不是OS自己控制
的),所以搞个串口同步通信还是没有问题的吧。我们组新人也是2个星期就搞出来C串
口程序,就两个文件而已。为什么大家这么怕串口?

题。

【在 T********i 的大作中提到】
: 就一个问题。你怕不怕偶尔丢数据吧?如果不怕,比如丢了可以再读一次。那就没问题。
: 否则,你这方法不沃克。
:
: 5

T********i
发帖数: 2416
24
我不是说了么?不怕丢数据。丢了数据不用恢复。你这么做行。你知道再多也没用。

个。

【在 b***i 的大作中提到】
: 偶尔丢了 不要紧,我们一直发呢。其实我们要求20%成功就算成功。另外,我写的C#程
: 序在Windows下能够用14个串口同时进行通信,1秒一次,也是正常运行了7个月。不过
: ,有的时候Windows有些忙,会出现错误,但是我能处理这个异常,一般几天丢掉几个。
: 到Linux,要求1秒能够发最多6次,每个单独控制。还有就是多了一个高速串口1Mbps。
: 因为考虑到Linux更可靠,没有GUI(自己的嵌入式设备是完全控制的,不是OS自己控制
: 的),所以搞个串口同步通信还是没有问题的吧。我们组新人也是2个星期就搞出来C串
: 口程序,就两个文件而已。为什么大家这么怕串口?
:
: 题。

b***i
发帖数: 3043
25
以前用串口,被我说服改用TCP/IP来负责底层的完整性,我们只考虑内容,然后内容用
JSON,怎么样。要是嵌入式能用Java就完美了。

【在 T********i 的大作中提到】
: 我不是说了么?不怕丢数据。丢了数据不用恢复。你这么做行。你知道再多也没用。
:
: 个。

T********i
发帖数: 2416
26
Raspberry Pi上Java都用的好好的。你那台比raspberry pi强好多倍。没理由不能用。
你这个其实不算嵌入式。属于arm linux。

【在 b***i 的大作中提到】
: 以前用串口,被我说服改用TCP/IP来负责底层的完整性,我们只考虑内容,然后内容用
: JSON,怎么样。要是嵌入式能用Java就完美了。

1 (共1页)
进入Programming版参与讨论
相关主题
现在Window下写GUI的话用什么库?问一个思路:如何创建并监听虚拟网卡
请问一下,用什么语言/库/脚本作GUI比较方便?ASIO TCP传送JSON如何知道包结束?
C++ and javaJSONCPP和ASIO能否联合使用(C++11)?
有人用C++调用过python/java的library吗ASIO异步一问
boost vs C++11嵌入式(PLC)的时区问题
C++11使用感受及一些问题为啥大家都比较python的web framework呢
用ASIO写TCP/IP,同步还是异步 ?发现ramdisk不错,多个进程通信用文件就可以了,简单
嵌入式Web有什么注意事项?有专门讲 message server performance 的资料吗
相关话题的讨论汇总
话题: java话题: 串口话题: c++话题: tcp话题: ip