1. Andorid串口开发包一般使用google多年前提供的android-serialport-api, 提供自用分支
早先社区报过 opentelemetry-cpp 在GCC 14中编译不通过的问题。最近我也是先升级我们项目组的工具链,主要也是把GCC升级到GCC 14,这时候发现有些第三方工具构建失败。 这里记录一下以防后续其他人碰到参考。
前面的章节已经把NanoMsg的简介,及C#相关的NNanoMsg使用Demo已经介绍完成了,今天这篇开始我们就要写关于Android怎么使用NanoMsg的文章,自己在网上搜了好久,发现Android中并没有已经封装好的NanoMsg的好用的包,所以我们就只能自己来实现了,相比C#中要麻烦的多。
NDK 全称 Native Development Kit,也就是原生开发工具包 ,官网对它有详细的 中文介绍 。可能一说到 NDK 或 JNI ,大家脑子里第一反应就是集成 C/C++ 。其实 JNI 的含义是 Java Native Interface ,这种接口允许 Java 和其他语言进行交互的,包括但不限于 C/C++ 。目前 Rust 也可以通过 JNI 来和 Java 交互,虽然不太成熟。
原文链接:https://rumenz.com/rumenbiji/linux-ack.html
前一篇我们介绍了《Android NDK编程(一)---NDK介绍及环境搭建》,简单介绍了一下什么是NDK和JNI,以前NDK环境的配置及怎么创建第一个NDK的程序,在上一篇的左侧栏中有一个CMakeList.txt的文件,这一章我们就来解析一下CMakeList文件。
内容一览:TVM 共有三种安装方法:从源码安装、使用 Docker 镜像安装和 NNPACK Contrib 安装。本文讲解如何通过 Docker 镜像 和 NNPACK Contrib 安装。
要说最好用的是select的形式,防止漏掉发送过来的数据,缺点是需要单开一条线程独立出来串口服务用来接收数据 一般比较大的工程里还是结合着libevent来用吧。 一般形式
与dup函数功能一样,复制由fd指向的文件描述符,调用成功后返回新的文件描述符,与旧的文件描述符共同指向同一个文件。
then find the file ~/ClickHouse/CMakeLists.txt
主要问题是rv1126&1109使用的gcc是gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf ,
组合键 Ctrl+a 进入设置状态 按z打开帮助菜单,或者直接输入菜单对应的字母即可 S键:发送文件到目标系统中 W键:自动卷屏。当显示的内容超过一行之後,自动将後面的内容换行 C键:清除屏幕的显示内容 B键:浏览minicom的历史显示 X键:退出minicom
众所周知,通过 tcgetattr 接口与 termios 结构体,我们可以获取一个终端设备的设置信息:
cd /d D:\Cgal\cmake\boost_1_55_0_vc142 v142,需要修改msvc auto_link
嵌入式Linux下串口编程与Linux系统下的编程没有什么区别,系统API都是一样的。嵌入式设备中串口编程是很常用的,比如会对接一些传感器模块,这些模块大多是RS232或者RS485接口,对于软件层面上来说,RS232与RS48区别不大。RS232与RS485在使用上的区别,RS232是全双工的,只能对接一个设备串口设备。RS485是半双工的总线协议,一般可以挂多个传感器设备,半双工的意思是同时只能有一个设备向串口发数据。
activated() { this.$nextTick(() => { // activated if (this.writerList.length > 0) { let cId = localStorage.getItem("cardIndex"); let cFlag = localStorage.getItem("cFlag"); console.log("标志", cFlag, "序号", cId);
#可以用命令行传递变量 RELEASE = abc #ifdef 变量名称不能加$() ifdef RELEASE $(warning RELEASE defined) else $(warning RELEASE not defined) endif #ifeq 后面参数要叫$(), 因为是值引用, 值可以为数值或字符串 ifeq ($(RELEASE),abc) $(warning RELEASE eqal abc) else $(warning RELEASE not equal abc) endif all: @echo ok! ************************************************** make 编译不同版本,例如debug, release 的简单示例。 用make 变量ver, 控制CFLAGS 变量,从而编译出不同版本。 [/pts/2@hjj ~/test]$ cat test.c #include <stdio.h> #include <unistd.h> int main(int argc,char *argv[]) { char *tty=ttyname(0); printf("tty is %s\n",tty); return 0; } [/pts/2@hjj ~/test]$ cat Makefile CC = gcc TARGET = test OBJS = test.o ifeq ($(ver), debug) $(warning ver is debug) CFLAGS = -g -Ddebug else $(warning ver is not debug) CFLAGS = -c -O3 endif $(TARGET): $(OBJS) $(CC) -o $@ $^ clean: rm test test.o 注释: makefile 采用了ifeq-else-endif 结构 可以判别莫个make变量是否定义。 make变量可以在makefile中定义,也可以由make命令行传递。 由于makefile 支持环境变量,所以你预先定义了环境变量,也可以不在命令行中传递而直接使用环境变量 这种机制使得编写脚本控制不同的复杂的编译成为可能, 例如支持各种地域的不同的版本。用地域变量,控制make的编译选项/D,控制编译出不同的版本 ---------------------------------------- 编译debug 版本, 从命令行传递变量 ---------------------------------------- [/pts/2@hjj ~/test]$ make ver=debug Makefile:6: ver is debug gcc -g -Ddebug -c -o test.o test.c gcc -o test test.o ---------------------------------------- 清理,无所谓版本信息 ---------------------------------------- [/pts/2@hjj ~/test]$ make clean Makefile:9: ver is not debug rm test test.o ---------------------------------------- 编译release 版本 ---------------------------------------- [/pts/2@hjj ~/test]$ make Makefile:9: ver is not debug gcc -c -O3 -c -o test.o test.c gcc -o test test.o
虽然以太网接口和USB接口也是以一个串行流进行数据传送的,但是串口连接通常特指那些与RS-232标准兼容的硬件或者调制解调器的接口。废话少讲,今天来解剖使用串口时的编程代码细节。
串口调试主要有 根据/proc系统信息确认串口状态,stty命令,编程调试 三种调试方法,下面我们分别具体介绍下。
#include <stdio.h> #include "time.h" #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <termios.h> int main() { struct termios opt; int fd=-1; int nread; char buf[1024]; fd=open("/dev/ttyS3" ,O_RDONLY |O_NONBLOCK); if(fd==-1) { printf("open /dev/ttyS3 error\n"); } tcgetattr(fd,&opt); //获取终端属性到opt tcflush(fd,TCIOFLUSH); //同时刷新收到的数据但是不读,刷新写入的数据但是不传送 cfsetispeed(&opt, B9600); //设置输入波特率 cfsetospeed(&opt, B9600); //设置输出波特率 opt.c_cflag&=~CSIZE; //(不用 )字符长度掩码。取值为 CS5, CS6, CS7, 或 CS8。 opt.c_cflag |=CS8; //取值为CS8 opt.c_cflag &= ~PARENB; //(不用 )允许输出产生奇偶信息以及输入的奇偶校验。 opt.c_iflag &= ~INPCK; //(不用 )启用输入奇偶检测。 opt.c_cflag &= ~CSTOPB; //(不用 )设置两个停止位,而不是一个 opt.c_cflag &= ~CRTSCTS; //(不用 )硬件流控 opt.c_cc[VTIME] = 150; //非 canonical 模式读时的延时,以十分之一秒为单位 opt.c_cc[VMIN] = 0; //非 canonical 模式读的最小字符数 opt.c_lflag &= ~(ICANON | ECHO) ; //(不用 )启用标准模式 (canonical mode)允许使用 //特殊字符 EOF, EOL, EOL2, ERASE, KILL, LNEXT, REPRINT, //和 WERASE,以及按行的缓冲。 //(不用 )回显输入字符。 tcflush(fd,TCIOFLUSH); tcsetattr(fd,TCSANOW,&opt); //改变立即发生 while(1) { nread = read(fd,buf,1000); //printf("nread=%d\n",nread); //if(nread !=-1 ) printf("%s",buf);//打印数据 sleep(2); memset(buf,0x0,1024); } if(fd!=-1) close(fd); return 0; }
2018电影春节档,唐人街探案居然拔得头筹,原因我分析了下,个人觉得 多数人都有一颗了解真相的心吧
1、sp80-pk881-6_a_qm215_linux_android_software_porting_manual.pdf 2、80-pk881-21_a_qm215_linux_peripheral_(uart,_spi,_i2c)_overview.pdf 3、80-ne436-1_j_bam_low-speed_peripherals_for_linux_kernel_configuration_and_debugging_guide.pdf
---- 2018电影春节档,唐人街探案居然拔得头筹,原因我分析了下,个人觉得 多数人都有一颗了解真相的心吧 程序员的世界里,总是充满着悬念,而带来悬念的就是挥之不去的bug 修复bug,就像侦办一起案件 我就蹭蹭热度 来个 程序员探案 系列吧 ---- 直击"案发"现场 前两天做嵌入式开发的一哥们在用ARM和一串口设备进行通信时, 碰到了诡异的问题,受尽折磨的他告诉我: 数据被"吃掉"了,还有人"调包" "案情"分析 通过大量分析发送和接收的数据对比,看出了些端倪 数据被"吃掉" 程序在接收数据时 0x
编译环境 Ubuntu 16.04 x86_64 himix2000 编译工具链 下载openssl源码 wget https://www.openssl.org/source/openssl-1.1.1d.tar.gz 解压源码 tar xvf openssl-1.1.1d.tar.gz 执行Configure脚本 ./Configure linux-generic32 \ no-shared \ no-asm \ --prefix=/ilock/dist/himix200_openssl_11
写这篇文章的原因:因为在linux开发串口应用的时候,遇到了问题,让遇到相同问题的人少走点弯路:
由于UART0 被设定为系统dubug 输出(简单来说就是将ttyS0 设定为console),所以使用UART3 作为普通的串口,进行与别的设备通信。
下载并配置好JAVA(JAVA_HOME、CLASSPATH、PATH),CMD中要能使用javah命令。
LINUX的库提供的波特率是标准波特率,应用时有时会用到非标准的波特率。以下试验使用的xilinx的zynq7020,linux内核是4.14版本。以增加波特率100k为例。看了一些直接在应用端改的一些方法,已经取消了,所以更改了内核
GPS模块属于字符设备,只需要和FL2440开发板的第二个串口连接既可以,然后将GPS测试模块放在室外便可以每隔一段时间向开发板的串口发一个数据包。
Windows下编译OpenSSL动态库的方法: 1、安装ActivePerl 初始化的时候,需要使用perl 2、使用VS下的Visual Studio 20xx Command Prompt进入控制台模式 3、解压缩openssl的包,通过cd命令切换到openssl的目录 4、执行:perl configure VC-WIN32 5、执行:ms/do_ms 6、选择不同的编译结果 1) 执行:nmake -f ms/ntdll.mak 该命令生成动态库,默认使用的是MD 2) 执行:nmake -f ms/nt.mak 该命令生成静态库,默认使用的是MT 3) 想生成使用静态链接运行时库的动态库则采用下面方法 复制一个ntdll.mak并命名为ntdll_mt.mak,修改里面的 “CFLAG= /MD /Ox ..............” 为/MT ,然后重新编译,执行 nmake -f ms/ntdll_mt.mak 4) 想生成使用动态链接运行时库的静态库则采用下面方法 复制一个nt.mak并命名为nt_md.mak,修改里面的 “CFLAG= /MT /Ox ..............” 为/MD ,然后重新编译 ,执行 nmake -f ms/nt_md.mak 7.其它命令: nmake -f ms/ntdll.mak clean // 清除编译的中间文件 nmake -f ms/ntdll.mak install // 安装 ,主要是linux下面会自动放到程序目录中 。
默认log串口:Board_KERNEL_CMDLINE := console=ttyHSL0, 115200, n8
本文主要介绍了在CMakeLists.txt中指定使用静态库/MT还是动态库/MD,以及如何在MSVC的环境下编译C/C++项目。通过在CMakeLists.txt中设置CMAKE_C_FLAGS、CMAKE_CXX_FLAGS变量,可以控制编译器使用静态库还是动态库。同时,通过使用CMAKE_USER_MAKE_RULES_OVERRIDE变量,可以在外部控制/MD和/MT选项,避免在多个项目之间重复设置CMakeLists.txt。
前两节我们介绍串口驱动的框架和tty core部分。这节我们介绍和硬件紧密相关的串口驱动部分。
paho.mqtt.c是eclipse开发的C语言跨平台mqtt client 开源库,之前写过一篇博客《cmake:VS2015和GCC编译paho.mqtt C/C++ client》介绍如何编译它。 最近在使用的时候发现有个问题:paho.mqtt.c在MSVC编译的时候不能支持/MT编译。
官方资料:https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html
版权声明:本文为博主原创文章,转载请注明源地址。 https://blog.csdn.net/10km/article/details/51735432
CMake意为cross-platform make,可用于管理c/c++工程。CMake解析配置文件CMakeLists.txt生成Makefile,相比直接用Makefile管理工程,CMake更灵活和简单。
cmake是kitware公司以及一些开源开发者在开发几个工具套件(VTK)的过程中所产生的衍生品。后来经过发展,最终形成体系,在2001年成为一个独立的开放源代码项目。其官方网站是www.cmake.org,可以通过访问官方网站来获得更多关于cmake的信息,而且目前官方的英文文档比以前有了很大的改进,可以作为实践中的参考手册。
The results of a successful configuration are build files that control the build step. The nature of the build files depends on the generator used during configuration, but in all cases they contain several targets, one per library, and a default global target corresponding to all the libraries.
本文主要讲述如何使用CMakeLists.txt,指定当前程序的C++编译标准。
Keil MDK是非常常用的单片机开发集成环境,Keil公司2005年由ARM公司收购,现在是ARM主要的嵌入系统开发平台(ARM的另一个开发环境ds-5早在九年前就停止更新了)。 Keil虽然是个集成开发环境,但Keil本身其实是由μVision IDE和arm编译器构成。cmake虽然目前不支持生成μVision的工程文件,但cmake完全可以使用MDK中提供的arm编译器来实现独立于μVision的交叉编译(说到底μVision只是一个为开发者提供易用的GUI界面,真正干活儿的还是编译器)。 cmake实现交叉编译最重要的就是正确的定义编译工具链(toolchain),本文以Nationstech.N32G45X(国民技术)平台为例说明如何在定义cmake交叉编译工具链来实现使用MDK的armcc编译器执行单片系统的交叉编译。
Linux下安装Erlang 一、升级openssl # cd /usr/local/ # wget http://www.openssl.org/source/openssl-1.0.1s.tar.gz # tar -zxvf openssl-1.0.1s.tar.gz # cd openssl-1.0.1s # ./config --prefix=/usr/local/openssl # vim Makefile --修改CFLAG= -DOPENSSL_THREADS 修改成 CFLAG= -fPIC
已经大半个月没有更新文章了,大家还记得之前作者写的一篇关于RT-Thread的微内核移植的文章吗?如果不记得没关系。看如下是文章链接。
3、在自己项目的“CmakeLists.txt”文件中增加一行对glog路径的指定:
领取专属 10元无门槛券
手把手带您无忧上云