自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

一个软件工程师的技术笔记

嵌入式软件开发笔记

  • 博客(151)
  • 资源 (5)
  • 收藏
  • 关注

原创 Mac OSX 安装 libcoap

coap协议初体验

2022-08-06 16:42:42 487 1

原创 OpenSSL 椭圆曲线(ECDSA)签名与验证示例

以下TestEcdsa函数演示了多种密钥生成与初始化的方法,以及签名、验证签名。可对应改变注释代码块进行验证。注意,函数最后未做严格的内存清理。

2022-07-23 21:36:04 2612 1

原创 在 MacOS 上使用 Qt 开发 Android APP

使用 QtCreator,利用 Qt 库、openjdk、Android sdk、ndk 以及其他的 Android 工具,实现 Qt、c++ 开发 Android APP!

2022-04-10 22:37:50 3478 1

原创 各类型新能源汽车概览

新能源汽车类别,基本构造原理。

2022-04-10 15:24:15 611

原创 高级驾驶辅助系统各子系统一览

各 ADAS 高级辅助架势系统一览。

2022-04-09 12:22:45 1863

原创 有关 -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 770

原创 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 603

原创 使用 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 329

原创 一种自动化生产测试流水线

最近了解到深圳昇润科技的一种测试生产线,分享给大家。昇润科技是一家主攻蓝牙方案与模组的高新技术企业,对于模组产品,生产测试是很重要的一个环节。在专门的生产车间中,做无尘化处理,并列布置了两条流水线,对模组进行批量化处理。流程如下:上板。把待处理模组从货箱、托盘中同时一个或多个取出,放入流水线。 分板摆盘。模组 PCBA 生产后是多个还连接在一起,需要切割分板,然后放置到正确的位置,比如电源、数据接口的准确接线。 缓存。人工上板、摆盘速度无法做到恒定且与流水线完全一致,所以需要缓存。 RF 测试

2021-11-03 07:09:43 1066

原创 一个基于 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 1136 1

原创 蓝牙 4.0 BLE 协议栈基本概念

协议栈的实现方式采用分层的思想,控制器部分包括:物理层、链路层、主机控制接口层;主机部分包括:逻辑链路控制及自适应协议层、安全管理层、属性协议层、通用访问配置文件层、通用属性配置文件层;上层可以调用下层提供的函数来实现需要的功能。物理层(Physical Layer)是1Mbps自适应跳频的GFSK射频,工作于免许可证的2.4GHz ISM(工业、科学和医疗)频段。这一层可以是软件API或硬件接口,如UART、SPI、USB。 链路层(Link Layer)用于控制设备的射频状态,设备将会处于五.

2021-10-19 08:58:48 3597

原创 汽车开发节点 ET、PT、SOP

概念设计 详细设计 SE Simultaneous Engineering,同步工程,从造型开始进行车身分块、整车总布置、车身总布置及其装配性、通过性;钣金件成型性、焊接性等工艺同步分析与工艺仿真。 FT Functional Trial,功能样车试制,进行产品设计的几何验证和功能验证。常规要求 80% 正规工装样件,同步进行部品几何尺寸、外观质量以及材料认可。 ET Engineering Trial,工程验证试制,就设计、制造、装配各环节过程进行综合确认,主要是验证工艺、工装。同步

2021-10-12 21:44:59 23995 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 339

原创 开发者测试技术十三问

为什么要做测试?一个段子:千万不要跟程序员说,你的代码有bug,他的第一反应是你的环境有问题,第二就是你是傻逼不会用吧?你要跟他这么说,这个程序运行的怎么运行的跟预期不一样,是我操作有问题吗? 这货就会第一反应,我擦,这是不是出bug了?所以程序员自己潜意识里还是会认为自己的程序可能有问题的。测试,就是要把问题揪出来!测试也要讲究经济学?有关成本的问题:测到什么程度?有关策略的问题:黑盒测试、白盒测试?测试还要讲究心理学?应当一开始就假设程序中隐藏着错误 人类行为总

2021-09-16 22:32:30 298

原创 一个支持多目标编译的 makefile

# 这里使用 := 表示替换变量的值,某些变量的设置可根据需要使用 ?=、+= 等进行设置。# 编译器可按需要修改为交叉编译器等。CC := g++# 可配置预定义宏,在源码中 #ifdef 判断使用。DEFINES :=# 指定除了系统默认路径以外的搜索头文件的路径,注意需要与源码文件中 #include 后面使用的路径进行拼接定位头文件,有些使用的是多级目录,如 #include "muduo/base/noncopyable.h"。INCLUDE.

2021-09-10 07:25:07 164

原创 使用 muduo 库基于 TCP 进行消息(信令)数据传输的设计

muduo 网络库:https://github.com/chenshuo/muduo本文与先前发的《使用 UDP 进行消息(信令)数据传输的设计》(https://blog.csdn.net/engrossment/article/details/119989756)比较相似,不过针对 TCP 与 UDP 的不同,进行了特别的设计。请留意。消息的设计定义好需要的消息,可使用枚举类型给每一个消息定义一个值 定义一个通用的消息 header,至少包含 msgid、msglen 字段。 然后

2021-08-31 09:20:57 225

原创 使用 UDP 进行消息(信令)数据传输的设计

消息的设计先定义好需要的消息,可使用枚举类型给每一个消息定义一个值 定义一个通用的消息 header,包含 MESSAGE ID 字段 然后根据需要定义不同的消息,使用同样的 header 消息总大小不要大于 MTU 值。通常是 1500 ‑ 20 ‑ 8。 消息结构体声明 1 字节对齐。接收定义一个足够大(1500)的 buffer,每次指定读取 1500 字节 若返回值等于 ‑1,打印系统错误信息,返回 若返回值小于 header 的大小,打印错误信息,返回 若返回值大于 hea

2021-08-30 09:20:10 379

原创 调用 recv 接收 socket 数据时返回值的检查与处理

要写出健壮、高可用性的程序,必须留心异常情况并逐一妥善处理。本文对从网络套接字读取数据的 recv 函数涉及的异常情况进行分析整理。当然,关于网络编程,网络方面的异常情况多种多样,这里不展开,只整理该函数本身相关的。创建套接字后,调用该函数,需要注意检查其返回值。分三种情况进行处理:返回值大于 0,表示本次调用读取到的字节数。如果已到达的数据是充足的,该值与参数中指定 len 值相等。否则将小于 len 值。 返回值等于 0。对于 TCP 连接来说,这表示对端已经关闭了连接。对于允许传输空数据帧的

2021-08-24 09:55:45 1718

原创 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 420

原创 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 1129

原创 通信总线测试方案

概述本文档说明针对数据总线的测试方案。测试要点包括:数据线的功能测试。 地址线的功能测试。 数据总线的带宽性能测试。 数据总线的压力性能测试。对于数据总线的功能异常,包括数据线与地址线,一般有 4 种:数据线、地址线固定为高,也就是必能传输表示 1 。 数据线、地址线固定为低,也就是必能传输表示 0 。 数据线、地址线的两条或多条短路。 数据总线位宽异常。本方案根据以上需求与经验设计整理出对应的具体方法。在各平台具体开发中可以直接参考采用。注意,本方案不包含对存储芯片的读写验

2021-05-11 09:52:31 1205

原创 看 QtCreator 源码学 Qt 02 - 源码工程概览

前文提到的源码文件,在Ubuntu执行tree-L1列出文件树显示如下(tree命令需自行安装)。.├── bin #├── dist # distribution 的缩写,存放版本变更说明,还有一些安装文件配置信息。├── doc # document 的缩写。项目的配套文档,注意里面是 qdoc 的原始文档,可以通过 doxygen 工具生成 html 等格式的正式文档。├── d...

2021-03-01 08:51:05 283

原创 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 1214

原创 看 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 329

原创 工具 - 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 200

原创 外设、总线、接口概念辨析

命名:外设,peripheral。总线,bus。接口,interface。本文对这几个容易混淆的概念进行辨析,以便于更好地理解嵌入式系统。外设在个人电脑等领域是指主机以外的一些设备,如显示器、键盘、鼠标、打印机等。总线的概念一般都使用了其字面意思,比较好理解,先不细说。一般的软件开发,接口说的是函数、类等与外界对接的门面。像互联网开发、企业应用、PC 软件开发,说到接口时指的是这个含义。而嵌入式系统的开发,常常会伴随着硬件设备的使用。描述硬件时接口(英文表...

2021-01-23 20:31:34 2082

原创 通用调试步骤分享

调试步骤了解问题本身; 了解问题相关人员; 了解问题相关情况; 复现问题,确定复现操作步骤; 分析已有信息,定位问题根源; 进一步理清问题所在系统; 设计调试排查方案并实施; 寻求帮助,获取新思路; 深入理解问题所在系统; 收集更多测试数据进行分析;了解问题本身发生了什么事?注意,不带任何情绪、预设想法去了解发生的问题。此阶段先只了解问题表象,用陈述性语句描述问题、现象。技巧:留心问题报告者对问题、系统的了解情况,其描述是否存在偏差。了解问题相关人员知道谁是问

2021-01-19 16:23:32 275

原创 嵌入式 Linux 应用软件知识体系框架

基础知识编程语言C掌握基本语法掌握标准库的使用C++掌握基本语法掌握基于 C++ 的面向对象开发方法Python掌握基本语法掌握与 Linux 系统的交互Shell(bash)掌握基本语法掌握与 Linux 命令的结合使用Linux 文件系统启动流程sysvinit服务的管理与裁剪systemd服务的管理与裁剪了解 qt4、qt5 的移植了解 yocto构建文件系统常规 Linux 应用

2021-01-13 19:31:49 814

原创 外设测试 - RTC 测试

概述Linux 系统中获取 RTC 时间可能有两种途径,一种是处理器内部的 RTC,另一种是主板上独立的 RTC 模块。我们这里不涵盖前者,因为一般认为处理器良率较高。RTC 模块有几大主要部件:晶振、RTC 芯片、I2C 总线、电池供电。所以测试方案的设计就是从这几个部件的功能确认出发。读取 RTC 时间RTC 芯片除了电池可以供电,板卡本身的系统电源也会给他供电。当从 Linux 系统中能够读取到 RTC 芯片上的时间时,就起码确保了两个功能运行正常:RTC 芯片正常;与处理器连接的 I

2020-12-09 22:32:26 3507

原创 外设测试 - 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 567

原创 外设测试 - KEY 测试

概述按键的设计,核心功能就是通过按钮触发一个高电平或低电平脉冲,发送到处理器进行处理。所以测试方法就是去确认获取事件。以下对几类常见按键进行分别说明。用户按键之所以叫用户按键,是因为该类按键触发的事件最终到达用户层,由应用程序自行决定触发何种动作。所以我们的测试方法就是事先运行一个应用程序,监听用户按键事件。当获取到事件时,程序可通过控制 LED 闪烁或者切换显示屏显示内容等方式告知测试员按键正常。复位按键复位一般有两种,有的分别叫做 FULL RESET、WARM RESET,有的

2020-12-07 21:39:09 787

原创 工具 - Ubuntu

记录工具的基本使用,配置方法,常见问题等。有新内容会持续更新。方便下次使用时翻查。官网:https://ubuntu.com/初始化配置这里记录新安装 Ubuntu 后的配置。一般是基于 VirtualBox 安装使用。 配置不自动弹出插入的 U 盘 Settings -> Details -> Removable Media 配置软件源 打开 Software & Updates,配置 Download From 为 China.

2020-12-03 20:24:48 130

原创 外设测试 - LED 测试 - 功能测试

LED 测试是简单直接的,就是确认其能够控制点亮和熄灭。是的,熄灭也要确认,以防电路存在问题。如果短路等原因造成 LED 持续点亮,那这个 LED 就是废的了。LED 的设计有以下几种情况:电源 LED通常为红色,电源通上就亮起。测试方法就是,通上电源,检查确认红色亮起。USER LED这种 LED,我们可以编写程序循环控制其亮灭变化,让测试员随时观察。在 Linux 中常规用户灯会生成设备节点用户控制,比如执行如下命令就可以让其持续闪烁:echo heartbeat >

2020-11-27 19:15:46 768

原创 再考系统架构设计师 - 分享三大要素经验

2018 年第一次考,论文科目差几分,惜败。2019 年,女儿在差不多考试的时候出生,计划中的再考也就没有实施了。今年 2020,我又来了。今年的备考是做得比较糟糕的。工作和生活都不很顺,心态差。都是借口吧,其实就是现在的自己不得劲。无论怎样,这次考完了,也许会通过;如果不通过,明年应该还会再考。做好记录,积累经验。这次考完,我认为主要有三大要素:知识记忆 临场发挥 经验积累知识记忆不用多说,早上的综合知识,大部分题目,懂的就懂,不懂的只能蒙。就看你记住了相关知识点没有。下午的案例分析

2020-11-09 21:00:11 365 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 888

原创 外设测试 - 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 1070

原创 外设测试 - 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 953

原创 嵌入式系统 - 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 1038

原创 外设测试 - 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 3159

原创 外设测试 - 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 2582

USB-3.0-生产测试方案调研.pdf

生产检测批量自动化测试方案,基于功能特性进行测试,不作电气特性、性能测试,用于快速检测由产品生产引起的问题,而非设计缺陷问题。

2020-07-27

linkloop-1.0.1-hp.tar.gz

对 TCP/IP 协议栈中的链路层的直接数据收发测试,以便发现一些在上层网络层、传输层无法发现的问题。

2019-07-30

计算本周是一年中第几周

第几周 C 程序 代码 计算本周是一年中第几周

2012-10-21

ssh-keygen 中文手册

ssh-keygen 中文手册

2012-09-03

Linux下简单C++ socket编程

Linux下简单C++ socket编程,有文档、源码,几个类。

2012-08-02

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除