o_ra

o_ra 查看完整档案

杭州编辑  |  填写毕业院校  |  填写所在公司/组织填写个人主网站
编辑
_ | |__ _ _ __ _ | '_ \| | | |/ _` | | |_) | |_| | (_| | |_.__/ \__,_|\__, | |___/ 个人简介什么都没有

个人动态

o_ra 发布了文章 · 1月22日

golang中的联合体

昨天使用protobuf中的oneof发现编译出来的代码挺奇怪的,详细看看发现golang中使用联合体是这样用的

定义一个接口类型,这个接口类型就一个方法,实现了这个方法就可以赋值了。

type msgPayload interface {
    msgPayload()
}

要使用联合体的地方使用接口代替

type Message struct {
    Payload msgPayload
}

然后就可以分别定义各个结构了,只需要添加定义的空接口就行了

type MsgA struct {
    A uint32
}
func (*MsgA) msgPayload() {}

同样使用的时候,定义结构体

msgA := Message{Payload:&MsgA{A: 000}}

读取时候使用

switch msgB.Payload.(type) {
    case *MsgA:
        fmt.Println("*MsgA")
    ......
}
查看原文

赞 0 收藏 0 评论 0

o_ra 发布了文章 · 1月21日

golang使用protobuf中的oneof

作用类似c里的联合体,写配置文件类似

message BBB{
    string b=1;
}
message CCC{
    int b=1;
}
message AAA {
    oneof payload {
        BBB b;
        CCC c;
    }
}

使用的时候导入例如为xxx模块:
创建结构体时候要手动创建oneof里的结构,写法类似:

msg := &xxx.AAA{Payload: &xxx.AAA_BBB{B: &xxx.B{"123"}}}

解析出来判断是BBB还是CCC的时候使用

switch msg.Payload.(type) {
    case *(xxx.AAA_BBB):
    case *(xxx.AAA_CCC):
}
查看原文

赞 0 收藏 0 评论 0

o_ra 发布了文章 · 1月5日

vue中使用wasm

刚学前端的东西弄了很久才放进去,记录一下,刚开始使用插件直接加载wasm发现多个参数没办法传,还是使用原始产生的js文件来加载。

怎么编译c/c++代码可见 wasm总结

把wasm放到vue里,要修改:

  • 在vue.config.js中添加配置
const CopyWebpackPlugin = require('copy-webpack-plugin');
plugins: [
      new CopyWebpackPlugin([
            {
              from: "./src/wasm/out/sig_handler.wasm",
              to  : "./static/js/sig_handler.wasm"
            },
        ])
    ]

意思大概是把wasm文件放到打包后的static/js/位置,这样编译wasm过程中生成的胶水js文件就能访问到wasm文件了

  • 然后在生成的胶水js文件末尾加上
export default Module;
  • 这样就能在main.js中导入了
const OriginalVueWasm = import('@/wasm/out/sig_handler')

导入之后使用


async function waitwasm() {
  const wasmmodule = await OriginalVueWasm;
  wasmmodule.default.onRuntimeInitialized = () => {
    Vue.prototype.$wasm = wasmmodule.default;
    //new Vue ...
  }
}


(async () => {
  waitwasm()
})()

这样在vue里就能通过this.$wasm来访问了

查看原文

赞 0 收藏 0 评论 0

o_ra 发布了文章 · 2020-12-11

快速将数据转换成图形

安装
apt install plotutils
使用命令
graph -T png >out.png
将数据粘贴在终端中类似

1 1
2 2
3 6
4 4
5 5
\n

数据将以png格式保存到out.png类似如下的图
image

也可以将数据放在文件中执行
graph -T png <data.txt >out.png

查看原文

赞 0 收藏 0 评论 0

o_ra 发布了文章 · 2020-12-02

wasm中使用gsl库

编译要在linux下进行,环境搭建见上篇,如果不能连外网,比较简单是使用docker命令
docker run -it --rm -v $(pwd):/home/src trzeci/emscripten sh

解压下载到的压缩包
tar -zxvf gsl-2.6.tar.gz
编译库

emconfigure ./configure
emmake make

编译结束时候会提示错误类似
error: undefined symbol: gsl_ran_beta (referenced by top-level compiled C/C++ code)
百度说是wasm对动态库支持不好,这是编译动态库时候出问题了先不管这些。

在.libs目录已经生成了静态库libgsl.a把这个拷贝出来备用,头文件在gsl目录下拷贝出来备用

使用类似命令
emcc demo.cc libgsl.a -I. -o demo.js -s "EXTRA_EXPORTED_RUNTIME_METHODS=['ccall', 'cwrap', 'setValue', 'getValue']" -lm
就可以使用gsl库了

查看原文

赞 0 收藏 0 评论 0

o_ra 发布了文章 · 2020-11-25

wasm总结

环境安装可以参考:
WebAssembly 环境配置
也可以使用docker:
docker run -it --rm -v $(pwd):/home/src trzeci/emscripten sh

比较全面介绍wasm的:
C/C++面向WebAssembly编程

wasm有自己的工具链对应

emconfigure ./configure
emmake make

类似的静态库使用命令

emcc -c test_so_lib.cc
emar rcs test_so_lib.a test_so_lib.o

编译生成文件:
有js html wasm文件可以生成,html是一个测试网页用处不大,wasm是编译好的二进制程序文件单独使用要自己写加载功能,js是加载wasm的一个胶水脚本有加载wasm和导出一些符号的功能,命令可以使用

emcc demo.cc test_so_lib.a  --js-library demo_js_lib.js -o demo.js -s "EXTRA_EXPORTED_RUNTIME_METHODS=['ccall', 'cwrap', 'setValue', 'getValue']"
  • --js-library demo_js_lib.js 可以连接js文件在c里调用
  • -s "EXTRA_EXPORTED_RUNTIME_METHODS=['ccall', 'cwrap', 'setValue', 'getValue']" 要导出到js里的函数
  • -o demo.js 会生成wasm和js两个文件
  • -g4 附加调试信息可以调试时候使用

c和js参数传递和返回正常是只能传number

传一整块内存时候也可以使用number传指针的方式,但是有些局限性:

  • js访问c的内存:c里能使用的内存和栈空间都是在胶水js里申请的一大块内存的一部分,在正常js里分配的变量等,不在这部分内存里c是看不到的,要使用这块内存可以直接在c里返回一个全局缓冲区的指针或者动态malloc出来内存的指针,在js里通过胶水js里的setValue和getValue来操作
  • c访问js的数据:c不能访问js里分配的内存,只能通过c申请了内存在js里把数据放进去传给c,其中胶水js里的ccall是一个类似这样封装,可以传array进去,大致是在栈上分配一块内存把数据放进去传给c,这样也就造成了在c里直接操作传进去的数据栈释放了就没了,原始数据也不会被修改

demo代码放在了
https://gitee.com/nick_yang/wasm_test.git

查看原文

赞 0 收藏 0 评论 0

o_ra 发布了文章 · 2020-11-19

web中打开win10远程桌面

大致流程是:web的前端使用novnc, 使用websockify在前端的websocket请求和vnc服务之间做一个桥, 采用UltraVnc提供vnc服务,由于在win直接安装一直没成功,将websockify安装在了wsl中

安装
https://www.uvnc.eu/download/1240/UltraVnc_1240_X64.msi
打开vnc服务
image.png
记下打开的端口,并配置vnc的密码

下载
https://gitee.com/mirrors/deb-novnc.git
https://gitee.com/mirrors/websockify.git
在websockify中执行 python setup.py install 中间要使用numpy可以事先安装好,整个安装成功之后执行

websockify --web ./deb-novnc/ 9000 xx.xx.xx.xx:5901

--web是下载到的novnc的目录 xx.xx.xx.xx是vnc服务的地址和端口

[noVNC](http://x.x.x.x:9000/vnc.html)
中就能访问远程桌面了

查看原文

赞 0 收藏 0 评论 0

o_ra 发布了文章 · 2020-10-29

labview nxg打开新窗口的问题

在打开新窗口事件触发之后
image.png
创建引用,根据前面板的状态,决定是否运行vi

image.png

在子窗口中,面包配置成独立窗口,使用窗口关闭事件触发关闭当前的窗口
image.png

这个不知道问什么要单独一个while出来,如果不单独出来,第二次打开窗口时候其他事件也会触发窗口关闭事件。

查看原文

赞 0 收藏 0 评论 0

o_ra 发布了文章 · 2020-10-21

python协议解析

1. 协议解析和打包时候用bytes方法:

bin_buff = bytes()
bin_buff += (0x1234).to_bytes(2, byteorder = 'big')
bin_buff += (0x56).to_bytes(1, byteorder = 'big')

print('0x%s' % bin_buff.hex())          #输出0x123456
b1 = int.from_bytes(bin_buff[1:3], byteorder = 'big')
print('0x%x'% b1)                       #输出0x3456

2. 如果按c里的struct也可以使用

import struct
导入struct模块,使用pack unpack
编写如下格式的结构体时候

struct {
    unsigned char a;
    unsigned short b;
    unsigned char c;
}

要按照如下表格
image

压缩对应使用的格式为BHB

print('0x%s' % struct.pack('BHB', 0x12, 0x3456, 0x78).hex())
打印出来
image.png
看样子是为了对齐0x12后面补充了一个0x00,要实现c中1个字节对齐怎么弄那

image

看这个说明不太清楚测试一下效果如下

print('0x%s' % struct.pack('@BHB', 0x12, 0x3456, 0x78).hex())
print('0x%s' % struct.pack('=BHB', 0x12, 0x3456, 0x78).hex())
print('0x%s' % struct.pack('<BHB', 0x12, 0x3456, 0x78).hex())
print('0x%s' % struct.pack('>BHB', 0x12, 0x3456, 0x78).hex())
print('0x%s' % struct.pack('!BHB', 0x12, 0x3456, 0x78).hex())

打印出来
image.png

@和不加任何东西时候一样,应该就是默认的:填充对齐4字节,主机字节序。

而其余的= < > !则是没有填充的

=应该是按本机的字节序,在x86上测试的所以和<都是小端的
!网络字节序和>都是按大端排列的

查看原文

赞 0 收藏 0 评论 0

o_ra 发布了文章 · 2020-09-27

LabVIEW游标位置获取

自己读取LabVIEW的xy波形图中的游标 首先创建游标
image.png

获取游标的位置:在xy图右键选择创建->属性节点->游标->游标位置->全部元素
image.png

此时获取到的默认是第0个位置,如果有多个游标都要获取可以使用:在xy图右键选择创建->属性节点->活动游标 通过设置0 1 2...来切换要读取的游标
image.png

查看原文

赞 0 收藏 0 评论 0

认证与成就

  • 获得 0 次点赞
  • 获得 1 枚徽章 获得 0 枚金徽章, 获得 0 枚银徽章, 获得 1 枚铜徽章

擅长技能
编辑

(゚∀゚ )
暂时没有

开源项目 & 著作
编辑

(゚∀゚ )
暂时没有

注册于 2017-06-16
个人主页被 668 人浏览