- 博客(151)
- 资源 (5)
- 收藏
- 关注
原创 OpenSSL 椭圆曲线(ECDSA)签名与验证示例
以下TestEcdsa函数演示了多种密钥生成与初始化的方法,以及签名、验证签名。可对应改变注释代码块进行验证。注意,函数最后未做严格的内存清理。
2022-07-23 21:36:04
3930
1
原创 在 MacOS 上使用 Qt 开发 Android APP
使用 QtCreator,利用 Qt 库、openjdk、Android sdk、ndk 以及其他的 Android 工具,实现 Qt、c++ 开发 Android APP!
2022-04-10 22:37:50
3812
1
原创 有关 -fPIC 选项的编译问题
嵌入式 Linux 上基于 makefile 的编译,执行编译出现如下错误:error: test/fake_blemgr_test.o: requires unsupported dynamic reloc R_ARM_REL32; recompile with -fPIC这个问题涉及到生成位置无关代码的机制,在我这里的情况是,对于 -fPIC 选项的使用,需要放置在 -fpie 选项的后面位置,才能生效,就不会再出现上述编译错误。CFLAGS += -O2 -pie -march=
2022-04-01 14:42:37
940
原创 CC2640 蓝牙动态切换广播数据
CC2640 蓝牙动态切换广播数据基于官方例程 ti\simplelink_cc2640r2_sdk_1_40_00_45\examples\rtos\CC2640R2_LAUNCHXL\blestack\simple_peripheral修改 simple_peripheral.c 文件。保留原本的 advertData 数组,在广播数据里设置 UUIDs 数据。static uint8_t advertData[] = { // Flags: this field set
2021-11-09 13:37:42
779
1
原创 使用 popen 函数时的编译警告处理
有时需要执行一个shell命令而且还要获取其执行后的输出,就可以使用popen接口。执行完命令后返回一个FILE*文件句柄,然后就可以通过fread读取器执行输出了。使用这个函数需要添加#include<stdio.h>,但是编译时还是可能会遇到如下警告信息:warning: implicit declaration of function ‘popen’makes pointer from integer without a cast这是因为这个接口虽然在...
2021-11-04 08:59:55
489
原创 一种自动化生产测试流水线
最近了解到深圳昇润科技的一种测试生产线,分享给大家。昇润科技是一家主攻蓝牙方案与模组的高新技术企业,对于模组产品,生产测试是很重要的一个环节。在专门的生产车间中,做无尘化处理,并列布置了两条流水线,对模组进行批量化处理。流程如下:上板。把待处理模组从货箱、托盘中同时一个或多个取出,放入流水线。 分板摆盘。模组 PCBA 生产后是多个还连接在一起,需要切割分板,然后放置到正确的位置,比如电源、数据接口的准确接线。 缓存。人工上板、摆盘速度无法做到恒定且与流水线完全一致,所以需要缓存。 RF 测试
2021-11-03 07:09:43
1356
原创 一个基于 muduo 库的异步处理的 UDP 客户端实现
概述muduo(GitHub - chenshuo/muduo: Event-driven network library for multi-threaded Linux server in C++11)实现了一个 one loop per thread 的模型,是进行异步处理的利器。而网络通信,由于数据到达的不可预期,使用异步方式是十分合适的。本文对使用 muduo 网路库实现一个 UDP 客户端进行数据收发处理的方法作简单介绍。由于 muduo 是一个运行于 Linux 上的 C++ 网路库,本文
2021-10-21 22:56:27
1371
2
原创 蓝牙 4.0 BLE 协议栈基本概念
协议栈的实现方式采用分层的思想,控制器部分包括:物理层、链路层、主机控制接口层;主机部分包括:逻辑链路控制及自适应协议层、安全管理层、属性协议层、通用访问配置文件层、通用属性配置文件层;上层可以调用下层提供的函数来实现需要的功能。物理层(Physical Layer)是1Mbps自适应跳频的GFSK射频,工作于免许可证的2.4GHz ISM(工业、科学和医疗)频段。这一层可以是软件API或硬件接口,如UART、SPI、USB。 链路层(Link Layer)用于控制设备的射频状态,设备将会处于五.
2021-10-19 08:58:48
3740
原创 汽车开发节点 ET、PT、SOP
概念设计 详细设计 SE Simultaneous Engineering,同步工程,从造型开始进行车身分块、整车总布置、车身总布置及其装配性、通过性;钣金件成型性、焊接性等工艺同步分析与工艺仿真。 FT Functional Trial,功能样车试制,进行产品设计的几何验证和功能验证。常规要求 80% 正规工装样件,同步进行部品几何尺寸、外观质量以及材料认可。 ET Engineering Trial,工程验证试制,就设计、制造、装配各环节过程进行综合确认,主要是验证工艺、工装。同步
2021-10-12 21:44:59
32208
1
原创 Ubuntu 安装 mosquitto(也适用于 Windows WSL Ubuntu)
安装 cJSON mosquitto 依赖 cJSON 库,需要先安装到系统。 到 GitHub 下载最新 release 源码:https://github.com/DaveGamble/cJSON/releases 解压 执行 `make`,等待编译完成 执行 `sudo make install`,安装到系统 安装 mosquitto 到官网下载最新 release 源码:Download | Eclipse Mosquitto 解压 执行 `make`,等待编译完成 执行
2021-10-11 22:06:50
494
原创 开发者测试技术十三问
为什么要做测试?一个段子:千万不要跟程序员说,你的代码有bug,他的第一反应是你的环境有问题,第二就是你是傻逼不会用吧?你要跟他这么说,这个程序运行的怎么运行的跟预期不一样,是我操作有问题吗? 这货就会第一反应,我擦,这是不是出bug了?所以程序员自己潜意识里还是会认为自己的程序可能有问题的。测试,就是要把问题揪出来!测试也要讲究经济学?有关成本的问题:测到什么程度?有关策略的问题:黑盒测试、白盒测试?测试还要讲究心理学?应当一开始就假设程序中隐藏着错误 人类行为总
2021-09-16 22:32:30
386
原创 一个支持多目标编译的 makefile
# 这里使用 := 表示替换变量的值,某些变量的设置可根据需要使用 ?=、+= 等进行设置。# 编译器可按需要修改为交叉编译器等。CC := g++# 可配置预定义宏,在源码中 #ifdef 判断使用。DEFINES :=# 指定除了系统默认路径以外的搜索头文件的路径,注意需要与源码文件中 #include 后面使用的路径进行拼接定位头文件,有些使用的是多级目录,如 #include "muduo/base/noncopyable.h"。INCLUDE.
2021-09-10 07:25:07
229
原创 使用 muduo 库基于 TCP 进行消息(信令)数据传输的设计
muduo 网络库:https://github.com/chenshuo/muduo本文与先前发的《使用 UDP 进行消息(信令)数据传输的设计》(https://blog.youkuaiyun.com/engrossment/article/details/119989756)比较相似,不过针对 TCP 与 UDP 的不同,进行了特别的设计。请留意。消息的设计定义好需要的消息,可使用枚举类型给每一个消息定义一个值 定义一个通用的消息 header,至少包含 msgid、msglen 字段。 然后
2021-08-31 09:20:57
272
原创 使用 UDP 进行消息(信令)数据传输的设计
消息的设计先定义好需要的消息,可使用枚举类型给每一个消息定义一个值 定义一个通用的消息 header,包含 MESSAGE ID 字段 然后根据需要定义不同的消息,使用同样的 header 消息总大小不要大于 MTU 值。通常是 1500 ‑ 20 ‑ 8。 消息结构体声明 1 字节对齐。接收定义一个足够大(1500)的 buffer,每次指定读取 1500 字节 若返回值等于 ‑1,打印系统错误信息,返回 若返回值小于 header 的大小,打印错误信息,返回 若返回值大于 hea
2021-08-30 09:20:10
477
原创 调用 recv 接收 socket 数据时返回值的检查与处理
要写出健壮、高可用性的程序,必须留心异常情况并逐一妥善处理。本文对从网络套接字读取数据的 recv 函数涉及的异常情况进行分析整理。当然,关于网络编程,网络方面的异常情况多种多样,这里不展开,只整理该函数本身相关的。创建套接字后,调用该函数,需要注意检查其返回值。分三种情况进行处理:返回值大于 0,表示本次调用读取到的字节数。如果已到达的数据是充足的,该值与参数中指定 len 值相等。否则将小于 len 值。 返回值等于 0。对于 TCP 连接来说,这表示对端已经关闭了连接。对于允许传输空数据帧的
2021-08-24 09:55:45
2059
原创 C++11 新特性 - constexpr 关键字
变量:使用 constexpr 修饰的变量,编译器确保在编译期而非运行期确保该变量为常量。达到清晰、明确以及提高性能的效果。 constexpr int a = 1; constexpr int b = a + 1; 函数:返回类型及所有形参的类型都得是字面值类型,而且要求函数体只能有一条语句,即 return 语句。 constexpr int new_sz() { return 1 }; constexpr int a = new_sz(); C++14 去除了只能有一条语句的限制,只需
2021-06-20 10:48:48
476
原创 C++11 新特性 - 花括号列表初始化
需要注意,初始化与赋值不是一回事。 初始化内置类型 int a = 0; int a(0); int a = {0}; int a{0}; int *a = new int[10]{0, 1, 2}; 后续未指定的元素将进行值初始化。 初始化容器 vector<int> a; a = {0, 1, 2}; vector<int> *a = new vector<int>{0, 1, 2}; vector<string> a = {"a", "
2021-06-19 11:42:13
1244
原创 通信总线测试方案
概述本文档说明针对数据总线的测试方案。测试要点包括:数据线的功能测试。 地址线的功能测试。 数据总线的带宽性能测试。 数据总线的压力性能测试。对于数据总线的功能异常,包括数据线与地址线,一般有 4 种:数据线、地址线固定为高,也就是必能传输表示 1 。 数据线、地址线固定为低,也就是必能传输表示 0 。 数据线、地址线的两条或多条短路。 数据总线位宽异常。本方案根据以上需求与经验设计整理出对应的具体方法。在各平台具体开发中可以直接参考采用。注意,本方案不包含对存储芯片的读写验
2021-05-11 09:52:31
1356
原创 看 QtCreator 源码学 Qt 02 - 源码工程概览
前文提到的源码文件,在Ubuntu执行tree-L1列出文件树显示如下(tree命令需自行安装)。.├── bin #├── dist # distribution 的缩写,存放版本变更说明,还有一些安装文件配置信息。├── doc # document 的缩写。项目的配套文档,注意里面是 qdoc 的原始文档,可以通过 doxygen 工具生成 html 等格式的正式文档。├── d...
2021-03-01 08:51:05
335
原创 ARM 板卡 Flash 擦除
概述包括SPI(QSPI)Flash和NandFlash的擦除。环境准备各板卡对应的启动卡,不能从Flash启动系统。使用电脑连接板卡调试串口。擦除操作步骤系统启动后执行如下命令,将擦除所有识别到的Flash分区,包括SPI(QSPI)Flash与NandFlash的分区。LIST=$(cat/proc/mtd|awk-F':''{print$1}'|grepmtd);formtdin${LIST};doflash_er...
2021-02-25 10:51:50
1373
原创 看 QtCreator 源码学 Qt 01 - 起步
概述首先,QtCreator几乎是Qt官方除了Qt库之外最重要的作品;其次,QtCreator也是使用Qt开发的;最后,她开源。所以,我们通过分析学习其源码,一定能够学到很多Qt相关的高级知识与开发技能。那我们现在就开始吧!QtCreator源码在本次系列文章中,我们学习的QtCreator版本为4.5.2,下载地址为https://download.qt.io/official_releases/qtcreator/4.5/4.5.2/,选择qt-crea...
2021-02-24 08:19:21
427
原创 工具 - putty
官网:https://www.chiark.greenend.org.uk/~sgtatham/putty/问题与处理方案PuTTY 未提供搜索功能:右键顶部点击 Copy All to Clipboard,贴到 vscode 进行搜索。 进入全屏与退出全屏:右键顶部点击 full screen 即可进入,鼠标移到左上角点击左键调出菜单栏可选择退出全屏。 与 byobu 的结合,使用 Fn 键无法发送到 Ubuntu:设置 Terminal - Keyboard - The Function K
2021-01-28 13:41:58
289
原创 外设、总线、接口概念辨析
命名:外设,peripheral。总线,bus。接口,interface。本文对这几个容易混淆的概念进行辨析,以便于更好地理解嵌入式系统。外设在个人电脑等领域是指主机以外的一些设备,如显示器、键盘、鼠标、打印机等。总线的概念一般都使用了其字面意思,比较好理解,先不细说。一般的软件开发,接口说的是函数、类等与外界对接的门面。像互联网开发、企业应用、PC 软件开发,说到接口时指的是这个含义。而嵌入式系统的开发,常常会伴随着硬件设备的使用。描述硬件时接口(英文表...
2021-01-23 20:31:34
2610
原创 通用调试步骤分享
调试步骤了解问题本身; 了解问题相关人员; 了解问题相关情况; 复现问题,确定复现操作步骤; 分析已有信息,定位问题根源; 进一步理清问题所在系统; 设计调试排查方案并实施; 寻求帮助,获取新思路; 深入理解问题所在系统; 收集更多测试数据进行分析;了解问题本身发生了什么事?注意,不带任何情绪、预设想法去了解发生的问题。此阶段先只了解问题表象,用陈述性语句描述问题、现象。技巧:留心问题报告者对问题、系统的了解情况,其描述是否存在偏差。了解问题相关人员知道谁是问
2021-01-19 16:23:32
344
原创 嵌入式 Linux 应用软件知识体系框架
基础知识编程语言C掌握基本语法掌握标准库的使用C++掌握基本语法掌握基于 C++ 的面向对象开发方法Python掌握基本语法掌握与 Linux 系统的交互Shell(bash)掌握基本语法掌握与 Linux 命令的结合使用Linux 文件系统启动流程sysvinit服务的管理与裁剪systemd服务的管理与裁剪了解 qt4、qt5 的移植了解 yocto构建文件系统常规 Linux 应用
2021-01-13 19:31:49
923
原创 外设测试 - RTC 测试
概述Linux 系统中获取 RTC 时间可能有两种途径,一种是处理器内部的 RTC,另一种是主板上独立的 RTC 模块。我们这里不涵盖前者,因为一般认为处理器良率较高。RTC 模块有几大主要部件:晶振、RTC 芯片、I2C 总线、电池供电。所以测试方案的设计就是从这几个部件的功能确认出发。读取 RTC 时间RTC 芯片除了电池可以供电,板卡本身的系统电源也会给他供电。当从 Linux 系统中能够读取到 RTC 芯片上的时间时,就起码确保了两个功能运行正常:RTC 芯片正常;与处理器连接的 I
2020-12-09 22:32:26
4264
原创 外设测试 - ATAES132A 加解密芯片测试
原理使用芯片官方提供的读写操作库,进行先写后读并校验,确认数据一致。示例代码int main(void){ uint8_t ret; aes132p_enable_interface(); ret = write_memory_test(); if (ret != AES132_FUNCTION_RETCODE_SUCCESS) { aes132p_disable_interface(); printf
2020-12-08 21:47:38
652
原创 外设测试 - KEY 测试
概述按键的设计,核心功能就是通过按钮触发一个高电平或低电平脉冲,发送到处理器进行处理。所以测试方法就是去确认获取事件。以下对几类常见按键进行分别说明。用户按键之所以叫用户按键,是因为该类按键触发的事件最终到达用户层,由应用程序自行决定触发何种动作。所以我们的测试方法就是事先运行一个应用程序,监听用户按键事件。当获取到事件时,程序可通过控制 LED 闪烁或者切换显示屏显示内容等方式告知测试员按键正常。复位按键复位一般有两种,有的分别叫做 FULL RESET、WARM RESET,有的
2020-12-07 21:39:09
946
原创 工具 - Ubuntu
记录工具的基本使用,配置方法,常见问题等。有新内容会持续更新。方便下次使用时翻查。官网:https://ubuntu.com/初始化配置这里记录新安装 Ubuntu 后的配置。一般是基于 VirtualBox 安装使用。 配置不自动弹出插入的 U 盘 Settings -> Details -> Removable Media 配置软件源 打开 Software & Updates,配置 Download From 为 China.
2020-12-03 20:24:48
164
原创 外设测试 - LED 测试 - 功能测试
LED 测试是简单直接的,就是确认其能够控制点亮和熄灭。是的,熄灭也要确认,以防电路存在问题。如果短路等原因造成 LED 持续点亮,那这个 LED 就是废的了。LED 的设计有以下几种情况:电源 LED通常为红色,电源通上就亮起。测试方法就是,通上电源,检查确认红色亮起。USER LED这种 LED,我们可以编写程序循环控制其亮灭变化,让测试员随时观察。在 Linux 中常规用户灯会生成设备节点用户控制,比如执行如下命令就可以让其持续闪烁:echo heartbeat >
2020-11-27 19:15:46
935
原创 再考系统架构设计师 - 分享三大要素经验
2018 年第一次考,论文科目差几分,惜败。2019 年,女儿在差不多考试的时候出生,计划中的再考也就没有实施了。今年 2020,我又来了。今年的备考是做得比较糟糕的。工作和生活都不很顺,心态差。都是借口吧,其实就是现在的自己不得劲。无论怎样,这次考完了,也许会通过;如果不通过,明年应该还会再考。做好记录,积累经验。这次考完,我认为主要有三大要素:知识记忆 临场发挥 经验积累知识记忆不用多说,早上的综合知识,大部分题目,懂的就懂,不懂的只能蒙。就看你记住了相关知识点没有。下午的案例分析
2020-11-09 21:00:11
412
2
原创 外设测试 - FAN 接口测试
概述部分板卡使用的是 PWM 功能引脚来控制风扇转速,或者像下图的是只有 GPIO 控制启停。为了测试验证这里除了处理器引脚之外的其他供电电路,FAN 接口的测试只能接入风扇进行控制测试了,需要测试员观察风扇变化确认测试结果。参考代码#!/bin/bash# Description:# Control fan speed in loop.FAN_PATH='/sys/devices/platform/gpio_fan/hwmon/hwmon0/pwm1'RUNNING_FLA
2020-11-04 17:35:28
1055
原创 外设测试 - EEPROM 芯片测试
原理EEPROM 挂载在 I2C 总线下,程序基于 Linux 的 I2C 子系统进行数据读写,并校验。参考代码#include <stdio.h>#include <stdlib.h>#include <errno.h>#include <unistd.h>#include <getopt.h>#include <stdbool.h>#include <libgen.h>#include .
2020-10-30 08:32:30
1200
原创 外设测试 - ADC 电平采集测试
原理基于内核 IIO 子系统,给定固定输入电压,程序通过设备节点读取读数,换算为采集电压,与实际输入电压计算误差,不大于 5% 为测试通过。自动化测试设计1)考虑相邻通道存在短路的可能,最好给相邻通道设置不同的输入电压值。2)可从板卡扩展接口中的 3.3v、5v 等管脚中通过电阻分压的方法降到 ADC 的采集范围进行输入。参考代码#!/usr/bin/env python# Description:# Test ADC value, error limit is 5%.
2020-10-29 16:54:54
1080
原创 嵌入式系统 - Nand Flash 烧写问题排查
问题背景板卡:SOM-TL437x-A1事件:生产了 410 PCS 需要测试、烧写系统,部分板卡烧写出货系统异常。现象:其中 78 PCS 由于 BTB 问题未测试。332 PCS 功能测试后进行烧写,发现只有 47 PCS NAND Flash 烧写正常,285 PCS NAND Flash 烧写异常。内核报错:blk_update_request: I/O error,dd 报错:Input/output error。补充说明功能测试未有直接测试 Nand Flas..
2020-10-27 17:02:42
1311
原创 外设测试 - SD 、eMMC 测试
在 Linux 中,SD 卡、eMMC 设备都使用 mmc 总线,所以可以采用统一的测试方法。这里的思路是,先生成一个 1MB 大小的文件,写入设备,然后读取出来存到另一个文件。再使用 cmp 命令对比两个文件的内容是否一致。存储设备可能存在多个分区,所以对每一个分区都进行一次以上测试。mmc_test.sh:#!/bin/bash# Description:# Test SD or eMMC device with mount point. Get mount point from
2020-10-20 08:57:59
3524
原创 外设测试 - 4G 模块测试
这里介绍 ME3620、ME3630 4G 模块的使用方法。初始化ARM Linux 板卡#!/bin/shif [ ! -d "/sys/class/gpio/gpio188" ];thenecho 188 > /sys/class/gpio/exportecho out > /sys/class/gpio/gpio188/directionfimsleep 20echo out > /sys/class/gpio/gpio188/dire...
2020-10-20 08:43:19
2776
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人