C++
文章平均质量分 50
姚家湾
做研究和帮助他人是我的热情所在
展开
-
Zynq 开发板上直接使用g++ 编译应用软件
开发zynq C++应用程序,建议直接使用板上的g++ 编译,简单粗暴,效果佳原创 2022-03-31 21:26:35 · 614 阅读 · 0 评论 -
测试RT-Thread 动态模块
听说国人开发的RT-Thread OS 已经有一段时间了,一直没有尝试。毕竟学习一个新的平台花费的时间和精力非常多。这次来测试RT-Thread 的主要目的是希望使用它的动态库功能。原创 2021-09-08 12:53:31 · 3525 阅读 · 0 评论 -
在STM32MP157C 上编译restbed 库
编译restbed 库在STM32MP157C 上编译restbed 库遇到了麻烦,几天没有过。问题出在openssl 上面。经过很长时间的摸索,可能问题出在restbed 目录中的 test 要用到openssl 库,cmake 指定在dependency目录中。后来干脆将test 文件夹删除掉。产生出错时,将cmake.txt 中有关test 的部分(89~97行)删除掉。编译通过了。产生了librestbed.a 文件。测试程序的编译: $CC webServer.cpp -I./i.原创 2020-11-24 20:36:01 · 458 阅读 · 1 评论 -
Go 在STM32MP157C 上跑起来!
现代嵌入式系统中免不了需要网络功能,因此,开发诸如web server,websocket ,json 等网络程序是必不可少的。虽然C/C++是开发嵌入式程序主要的程序设计语言,不过C/C++ 开发现代网络应用程序显得有点老态龙钟,力不从心。被Go ,java,python 甩几条大街。2019年,我们花费了整整一年的时间,将嵌入式网络软件的开发工具从C++ 迁移到了Go,软件开发的效率大幅度提升,我们的做法是在目标计算机(比如全志H6,瑞芯微RK3399 上安装Go 编译器。直接在目标机上开发程序。对于S原创 2020-11-23 19:20:31 · 2964 阅读 · 1 评论 -
建立在STM32MP157 openAMP 上的IO-RPC协议
老实说,很久以前就知道corte-A 和cortex-M 的异构处理器芯片是个好东西。但是总是怕怕的,觉得它们开发起来好麻烦。网络上的介绍也说得稀里糊涂。直到最近使用STM32MP157C 才发现,至少STM32MP157 用起来没有想象的难。在做了一些基础实验之后,我还自己设计了一个应用层协议IO-RPC (IO 远程过程调用)。为设计Linux 的嵌入设备做准备。这将加快我们向基于Linux 的应用转移的步伐。相关内容,目前不成熟,分享给大家探讨。remoteprc,rpmsgAPI和open AM原创 2020-11-17 14:38:32 · 4284 阅读 · 10 评论 -
如何去掉STM32MP157C 上linux的LCD 和HDMI 显示,让出更多的控制引脚
STM32MP157 的最大特点是它的异构多处理器结构,它集成了两个Cortex-A7和一个Cortex_M4 处理器,其中cortex-M4 可以用来作为实时控制,或者通信处理器来使用。不过,当我使用米尔的STM32MP157 的开发板才发现,事情并不简单,开发板几乎使用和核心板的所有引脚,留给用户扩展的20pin 插座上引脚不多,肯定是不够用的。看了他们的底板电路图后,发现LCD 占了34个引脚。MIPI也占了14个引脚。这是一笔很大的资源。而且如果控制模块往往不需要LCD/HDMI 显示,而HM原创 2020-10-30 11:48:22 · 1265 阅读 · 0 评论 -
STM32MP157C bootloader,内核的编译
按照下面的博文中提示,学习如何编译STM32MP157 的bootloader 和内核。其中比较困惑的是文件目录有点搞来搞去,也有一点小问题。我将具体过程详细一点记录下来STM32MP157系列编译和烧录自定义的bootloader、linux内核及其设备树安装Yocto SDKYocto SDK 是编译STLinux 的工具包,从ST 官网下载解压缩yocto-sdk 包我在home/yao目录下建立了一个Yocto 目录,将下载的压缩包拷贝到这个目录中,从该目录进入终端方式.原创 2020-10-28 12:54:34 · 1111 阅读 · 0 评论 -
STM32MP157C -编译应用程序(IEC61499运行时)
今天完成了将我的应用程序编译到米尔开发板上运行遇到的问题1 原来应用程序是采用G++在Windows 的wsl 上编译的,而STM32MP157 的编译工具是GCC。其中有一些差别注意 #include 中的h文件名大小写问题 编译命令 添加 -lstdc++ 和-lm $CC -I./fblib -I./core -I./tinyxml2 forteV0.cpp ./fblib/*.cpp ./core/*.cpp ./tinyxml2/*.cpp -pthread -原创 2020-10-23 14:27:19 · 697 阅读 · 0 评论 -
编写STM32MP1857C 中M4 应用程序
今天是学习STM32MP157C的8第三天,研究在STM32CubeIDE 下如何开发M4的应用程序.原创 2020-10-22 14:44:11 · 561 阅读 · 0 评论 -
STM32MP1的M4 固件装载和双机通信
继续折腾米尔科技的STM32MP157C 开发板,程序员研究开发板和教师不同,不会绵绵俱到,往往是带着问题去寻找解决之道。实现了交叉编译cortex-A 的应用程序之后,下一步需要搞定两个问题M4 程序的开发和下载 cortex_A 处理器和cortex-M4 之间的通信毕竟我们是冲着异构处理器架构来的。本文参考:STM32MP157——Remoteproc和RPMsg 一文1.生成M4固件理论上M4 的编程和普通STM32F系列程序设计没有什么大区别,唯一不同的就是处理器上接口的配原创 2020-10-21 16:36:01 · 1842 阅读 · 0 评论 -
ubuntu 下搭建STM32MP157的交叉编译环境
ST 公司推出了了Cortex+A/cortex-M 异构解构的单芯片多核处理器产品了,虽然目前只有单核或者双核A7加M4 系列的产品,虽然和4核产品相比,MPU 的性能显得弱了一点,但是它融合了可以运行linux OS的coetex-A 处理器和实时性强,外设丰富的cortex-M4 处理器,在嵌入式是应用中具有其独特性。买了一块米尔科技的STM32MP157 开发板,体验一下。货还在路上,顺丰快递员还没有敲门。先看资料,搭开发环境。STM32MP1系列目前 该系列有三个产品STM32MP15原创 2020-10-20 17:44:18 · 1557 阅读 · 0 评论 -
GO 和C 的相互调用(2)-go动态库的C语言回调函数
为了在C/C++ 程序中调用Go 程序, 编写了go的程序库,那么在库函数中如何调用C 语言的回调函数呢?我们尝试一下。#include <unistd.h>#include <stdio.h>#include <string.h>#include <stdlib.h>typedef void (*callback)(void *,int);extern void c_callback (void *,int);extern callback原创 2020-10-10 14:45:29 · 1747 阅读 · 1 评论 -
GO 和C 的相互调用(1)
爱上了Golang,C/C++ 又不想放弃。好在Go 语言提供了和C语言相互调用的机制(CGO )。包括下面机构问题 C/C++ 调用Go 程序编写的库。 go 语言调用C/C++ 动态和静态库。 go 语言调用 C语言的回调程序(Callback) 函数之间传递参数本文先讨论前面两个问题。C/C++ 调用 Go首先写一个go 程序package mainimport "C"import ( "fmt")//export Foofunc ...原创 2020-10-10 11:11:27 · 2370 阅读 · 0 评论 -
IEC61499 功能块调用C++ 动态程序库的实现(3)
前面几篇博文已经大致描述了IEC61499 功能块调用动态程序库的好处。本篇博文介绍我的实现方法以及遇到的问题。实现的结果为了验证我的想法,实现了一个简单的功能块,称为FB_CALL_X2 .这个功能块有一个函数名称,两个参数,一个结果构成。name是被调用函数的名称,由两部分组成。格式为:程序库名称.函数名称,例如在本例子中为OpenLibaray .add和OpenLibaray.sub两个函数。在实验项目中,我编写了一个简单的动态程序库OpenLibaray.它内部有三个函数,分.原创 2020-10-01 22:24:58 · 722 阅读 · 0 评论 -
谈谈CANopen协议的机制
CANopen是基于CAN(控制器局域网)协议的高级通信协议和设备配置文件规范。该协议是为嵌入式网络应用(如车载网络)开发的。CANopen涵盖了网络编程框架,设备描述,接口定义和应用程序配置文件。CANopen使来自不同制造商的设备和应用程序之间实现通信标准化。它已被广泛用于各个行业,并在自动化和运动应用中具有突出的表现。就OSI通信系统模型而言,CAN覆盖前两个级别:物理层和数据链路层。物理层定义了所使用的线路,电压,高速特性等。标准的CAN协议实现数据链路层,它是基于帧的(消息)协议。CANope原创 2020-10-01 11:38:04 · 12152 阅读 · 1 评论 -
IEC61499 功能块调用C++ 动态程序库的实现(2)
使用IEC61499 开发应用的人都会有一个感触-“功能块到用时方显少”。所以用户开发功能块的必需的。理论上,IEC61499 标准提供了定义功能块类型的方式。比如在4DIAC 中,可以定义功能块类型。它包括可以定义基本功能块,服务接口功能块和复合功能块。而功能块内部算法可以使用ST 语言来编写,或者Lua 语言来。实际上,设计完成了功能块类型后,要将该功能块Export 成为运行时的C++ 代码,和运行时一起从新编译之后,运行时才真正支持定义的功能块(在4DIAC Forte 中称为外部模块(extern原创 2020-09-29 20:15:20 · 672 阅读 · 3 评论 -
IEC61499 功能块调用C++ 动态程序库的实现(1)
关于动态库动态加载库的优点是在程序运行时加载,而且开发主程序的时候不需要include 库的 .h文件。只需要知道函数的调用格式就可以了。 动态加载库需要使用CPU 的MMU 支持,所以在cortex-M 单片机上通常不能使用动态加载库的机制。为什么关心动态库的动态加载实现软件组件的远程动态部署和更新。例如在IEC61499 运行时中,如果用户自己开发ST或者C语言的功能块,开发环境通常是export 模块的C++ 源码,需要重新编译运行时才能更新。无法实现远程更新。如果使用docker 容器工原创 2020-09-29 11:32:10 · 598 阅读 · 0 评论 -
C++ 测试USB 串口速率
想测试STM32 和linux USB 串口速率,网上讲了各种软件好像都不能用,wireshark 的USB cap 也不管用,干脆自己写一个程序来测吧!关于测试程序执行时间的方法在测试串口时也不管用(clock,time 等等),需要使用一个线程来测:#include "serialPort.hpp"#include <pthread.h>#include <iostream>char buff[512];long counter;const char *de.原创 2020-09-25 10:13:31 · 1458 阅读 · 0 评论 -
明远智睿 NXP LS1012a 板测试(1)
最近买了一块明远智睿公司NXP ls1012a 开发(又是一个小众化的产品),主要用来测试它的网络性能和单核的运算能力。收到货后就从销售那里拿到了网盘地址。下载了编译工具。销售经理将我拉近了一个QQ群就算完事了,而在那个群里去问题,几乎当我是空气人。还是自己干吧! 伙伴到外地出差去了,本人对linux并不精通。于是折腾了一天时间,有了一些进展。 共享给大家。1 . 按照明远智睿的测试手册测试了网络,SSH,GPIO 没有遇到什么障碍。2 在2 我使用的X86 ubuntu ...原创 2020-09-11 21:56:17 · 635 阅读 · 2 评论 -
STM32 /mbedOS使用的C++小型XML库-TinyXML2
XML 结构化文档的处理是比价麻烦的,为在cortex-M CPU 上处理XML,我选择了tinyxml2 库,并且在Arm mbed OS 上实现。相对比较简单,在这里分享出来。下载代码下载地址https://github.com/leethomason/tinyxml2文档地址:http://leethomason.github.io/tinyxml2/下载解压后,在tinyxml2-master 找出tinyxml2.cpp 和tinyxml2.h 两个文件。这个有用的文件mbed原创 2020-08-03 06:48:22 · 1004 阅读 · 0 评论 -
libmodbus 库-Server /Slave仿真程序
为了测试4diac 的modbus 模块,编写了一个server 端的仿真程序。将代码放出了#include <stdio.h>#include <unistd.h>#include <stdlib.h>#include <errno.h>#include <memory.h>#include <sys/socket.h>#include "modbus.h"#include<stdlib.h>/×原创 2020-07-01 19:31:51 · 1999 阅读 · 0 评论 -
Mbed modbus TCP slave 和ubuntu modbusTCP client 程序
modbus TCP 协议modbus TCP 协议使用TCP 协议发送和接收modbus 消息。modbus TCP 消息结构如下,在modbus 消息的前面,添加了6个字节的头:Transaction Id Protocol Length Unit Address Message 2 Bytes 2 Bytes 2 Bytes 1 Byte N Bytes Transaction Id :是本次交互的IDprotocol :为0 表示m原创 2020-06-24 21:45:41 · 2206 阅读 · 0 评论 -
linux SPI 与 mbed OS 通信
本实验测试 sysfs 方式的linux SPI 。主板是全志H6 模块构成的设备,从机是nucleo STM32F429 开发板,运行Arm Mbed OS原创 2020-05-21 15:39:54 · 435 阅读 · 0 评论 -
SysFs方式下C语言控制GPIO(RK3399)
在单片机上异常简单的LED 闪灯程序在Linux OS 下居然会异常麻烦,网络上介绍linux 控制GPIO的文章,各种说法都有。而且大都是shell 命令控制,而不是C语言如何控制。 在树莓PI 中,有一个wiringpi 库,而且资料非常清楚。但是其它厂商的东西就凌乱了。我同时使用瑞芯微的RK3399 PC 板和一块全志低成本的H6 板。方式各不相同。终于搞得明白了点,将内容分享给大家。Linux 下的设备驱动模型主要包含:类(class)、总线(bus)、设备(device)、驱动(drive..原创 2020-05-21 08:49:22 · 2643 阅读 · 0 评论 -
libmodbus的编译和使用
libmodbus 是支持Linux,Mac OS X,QNX和win32 的一个modbus库,支持modbus TCP和RTU 两种模式。libmodbus 的官网:https://www.libmodbus.org/当前版本为:v3.1.6编译我在win10 下的wsl 下编译 下载解压 libmodbus 的源码,F:lib modbus-3.1.6文件夹中。进入wsl 的console,输入下述命令完成编译 cd /mnt/f/libmodbus-3.1.6...原创 2020-05-15 10:09:49 · 5163 阅读 · 1 评论 -
STM32F429 lwip+FreeRTOS 开发--我被ST cubeMX 5.6 版本搞死了
为了配合配合实现外接ADC 的DMA 方式传输,有一次使用cubeMX 软件开发lwip+freeRTOS ,下载了CubeMX 5.6 最新版本,结果是各种悲剧,以太网貌似联上了,但是ping 不通,程序员总是比较谦卑,出了问题总以为是自己的错。近半个月的折腾终于得出了一个结论,太相信ST 的最新版本了。结果按照cubeMX 5.0 ,按照https://www.cnblogs.com/bi...原创 2020-03-25 19:54:46 · 1308 阅读 · 0 评论 -
C++ 使用liburl 库访问influxDB
在modular2 edge 中需要使用C++ 访问influxdb 数据库,之前使用influxdb.cxxhttps://github.com/awegrzyn/influxdb-cxx.来实现,最近要将他们添加到modular-2 edge 的microservice 中去,详细一看,这个库居然没有读数据的功能,而且封装的很深,改起来比较麻烦,干脆自己来写一个。网络上轻量级的h...原创 2019-10-17 14:30:04 · 2012 阅读 · 1 评论 -
rapidjson 的格式检查
使用了一段时间rapidjson 库,经常会遇到程序退出(crashed)的现象,主要是没有做好解析过程中的出错处理。本文谈谈这方面的问题。parse 后判是否出错使用HasParseError()方法,例如:#include "rapidjson/document.h"#include "rapidjson/error/en.h"Document d;d.Parse...原创 2019-07-15 15:17:28 · 3110 阅读 · 0 评论 -
了解微内核
网络上不断地出现微内核OS的概念。特别是华为的鸿蒙OS 将采用微内核,更激发了对微内核的热情。其实Google Fuchsia OS 也采用了微内核Zircon。收集了一些内容,帮助自己理解什么是微内核。术语微内核(Microkernel)在微内核中,大部分内核都作为单独的进程在特权状态下运行,他们通过消息传递进行通讯。在典型情况下,每个概念模块都有一个进程。因此,假如在设计中有一个系...原创 2019-06-27 12:03:12 · 4439 阅读 · 3 评论 -
Mosquittopaho 和Paho MQTT的一些事情
MQTT 协议已经非常普及了。我们在程序中使用Mosquittopaho 作为linux 上的MQTT 代理,而客户端使用Paho MQTT库。用起来非常简单,但是有些细节还是值得记录下来。端口和协议 Mosquittopaho 开放了个端口(1883和9001),端口 1883 使用基于MQTT 的协议,在TCP上接收直接MQTT包。而9001 使用基于MQTT over we...原创 2019-06-27 10:44:37 · 8224 阅读 · 0 评论 -
linux 串口ttyS, ttyACM 还是ttyUSB?
linux 串口的坑真的好多!明明连了几个,/dev下一大堆,而且名字也多种。tty,ttyS,ttyACM,ttyUSB。。。 STM32 的OTG CDC 方式的串口,链接到windows 的WSL 认出来的是ttySxx,在windows 上认出了COM36,那么,在WSL 中为ttyS36,。 不过到了ubuntu 系统中,却认出了ttyACM。ttyACM 是什么东西?网...原创 2019-06-18 16:28:26 · 17413 阅读 · 5 评论 -
Linux串口的中断方式和SIGIO 信号
网络上有一些关于linux 中断方式的文章,但是都只有接收程序,没有发送。我编写中断程序时候遇到一些问题。小结一下大概有如下几点:收发都会产生SIGIO 信号 产生SIGIO 会中断sleep,造成sleep 定时不准。比如 原先将send 放在了主程序的while语句中while(true){send(buf,size)sleep(1);}发现这个时候定时不准。SIGI...原创 2019-06-17 21:25:29 · 8299 阅读 · 3 评论 -
STM32F429 DMA 方式连接 ADS1274
之前使用过ADS1246 24bit ADC 设计过产品。该芯片功能强大,可编程能力强。不过它的缺点是参数设置和通道选择,数据读写都是通过SPI 读写,无法实现DMA 模式数据传送。经测试,无法满足振动信号采集的要求。所以在设计振动信号测试IO板时,我们选择ADS1274 芯片。在本博文中,介绍如何使用STM32F429实现ADS274 的高速数据传送。内容会随着项目进展不断更新。...原创 2019-06-21 13:30:02 · 4697 阅读 · 7 评论 -
linux OS 与Mbed OS相结合(1)-Mbed 库的实现
对于程序员而言,硬件永远是麻烦制造者。而对付硬件的有力武器就是软件抽象。使用C++对象程序设计语言可以将硬件封装成C++对象。让程序员像定义和调用类的方式来访问硬件。这方面做的不错的是arduino,树莓PI和Arm 公司的Mbed OS。 在Mbed OS 中,使用C++类定义了大多数Cortex-M 处理的接口驱动:-DigitalOut-PWMout-Digita...原创 2019-06-02 15:35:22 · 1184 阅读 · 0 评论 -
Linux 下串口编程(C++ 程序设计)
串口通信是最简单的通信方式。即使在USB 非常流行的今天,依然保留了串行通信的方式。网络上已经有大量关于Linux下 C++ 串口编程的文章,但是我依然要写这篇博文。因为网络上的资料不是内容太多,就是过于简短。我想写的恰到好处。 文章中的部分内容来自于: Linux 下串口编程入门。 http://digilander.libero.it/roba...原创 2019-05-23 12:58:57 · 10028 阅读 · 6 评论 -
websocketpp 的使用
用户App 使用websocket 访问BaseService ,因此,编写baseService App 时要选择一个websocket 库。我这里选择了websocketpp库。 应用程序client 定时向baseservice 发送 jsonrpc 格式的digitalWrite。依赖库该库要使用到 boost 的一些库:sudo apt-get install libbo...原创 2019-07-17 15:30:38 · 5152 阅读 · 0 评论 -
工业边缘计算机的体系结构
概述modular-2 Edge 是一台模块化工业边缘计算机,采用的64 位ARM主处理器为核心的主处理器模块,cortex-M 单片机为核心的IO 模块构成多处理器,多模块系统。采用以太网作为背板总线。主处理器模块采用linux OS 操作系统。使用docker 容器管理应用软件。为了高效率实现IO模块的访问和App 之间的相互通信与协同。modular-2 Edge 设计了一个创新的基...原创 2019-07-22 13:50:19 · 1732 阅读 · 0 评论 -
modular-2 Edge软件白皮书
-modular industry micro,edge,cloud computing architectureArm 公司声称他们设计的处理器涵盖了从传感器到服务器(sensor to server)广泛的硬件设备。产品线从cortex-M 系列到cortex-A,从单核到多核,大小核,混搭核,种类繁多,令人眼花缭乱。不过到目前为主,除了cortex-M 面向各种嵌入式设备之外,cort...原创 2019-08-29 17:00:00 · 902 阅读 · 2 评论 -
STM32F7 LWIP协议栈TCP速度测试
下面的文章转自STM8/STM32 社区(http://www.stmcu.org.cn/module/forum/thread-611925-1-1.html)。和我最近测试的结果大致相同,STM32F7 上TCP 速率3Mbps左右。而之前我测试UDP,可以到30Mbps 以上。1、测试目的 在尽量保持硬件和软件一致的前提下,测试LWIP和DJYIP两个协议栈的TCP接收不同包的速...原创 2019-09-11 07:33:48 · 4214 阅读 · 0 评论 -
使用restbed 写入influxDB 数据库
关于influxDB 数据库influxdb是目前比较流行的时间序列数据库。它和传统的数据库有所不同。一些基本概念influxdb 与 Mysql 对比库、表比较 influxDB 传统数据库中的概念 database 数据库 measurement 数据库中的表 ...原创 2019-08-12 22:08:49 · 543 阅读 · 0 评论