自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

欲盖弥彰1314

如有一味绝境,非历十方生死。

  • 博客(226)
  • 资源 (5)
  • 问答 (1)
  • 收藏
  • 关注

原创 microcom串口调试工具使用

microcom是一个在终端中使用的串口助手,类似平常使用SSCOM一样的东西,不过是在终端中使用而已。使用的是busybox构建的文件系统-d :表示延时时间。-t :表示超时时间,超多少时间就自动退出(单位为 ms)。-s :表示传输速度,波特率的意思,这个根据自己的情况而定。-X :从 stdin 禁用 NUL 和 Ctrl-X 的特殊含义。

2023-10-20 20:09:22 922

原创 iperf3: error - unable to connect to server: No route to host 但嵌入式Linux设备

不精通网络以及iperf3让我不得不求助百度必应,但搜出来千篇一律都是说的防火墙问题,但嵌入式设备Linux系统没有防火墙。因为脚本里设置的WIFI的IP地址是一样,抱着试一试的心态修改了IP地址,一测试可以了。导致换了一台设备用同样的IP地址无法连接AP?用STA模式的设备去连接AP模式的设备才能产生40MH带宽。来测试没问题了,要换一台设备做STA设备。需要一台设备WIFI 设置为STA模式。起初用了一台设备做STA模式设备。做测试没有问题,能正常连上AP。一台设备WIFI设置为AP模式。

2023-09-24 09:40:31 761

原创 IAR目标代码4字节对齐

利用编译器一般定义数据变量都是4字节对齐的原理,当生成的目标代码是奇数字节,这时候就不是4字节对齐,当给目标代码最后加入一个4字节对齐的变量时,按照4字节对齐原理,最后的奇数字节后面的位置就被空出来达到4字节对齐的目的。如上图所示,在最后强加4字节后,n+1这个字节就会空出来将前面的本来的奇数字节补齐成4字节。是IAR的扩展关键字,强制编译,保证没有使用的函数或者变量也能够包含在目标代码中。无论最后是奇数是1个字节、2个字节、3个字节都是一样的,这里画演示图用3个字节。

2023-08-10 12:10:44 873

原创 控制器收不到工位板的状态数据包问题(RS422)排查解决

如下图通信框图所示,控制器工位板程序通过RS422和控制器(类似网关)通信,控制器在将数据转发给Linux应用程序。一开始设备装好,整个通信是没有任何问题的。然后在很久之后,负责Linux应用开发的同事就向我们反馈问题说收不到工位板程序发送的状态包。这就很奇怪了,一开始都是好好的。

2023-08-04 09:15:20 261

原创 Linux应用程序等待工位板指令应答超时500ms左右才等到应答问题(LwIP)定位排查

从物理层面检测出现超时500ms时的控制指令和应答信号之间的时间间隔:使用逻辑分析抓取两条指令的时间间隔,发现接收到控制指令到缴费机工位板发出应答300us左右。应用程序控制缴费机工位板的指令和缴费机回复应答的时间之间不能超过500ms, 但是搞Linux应用同事测试一段时间就会出现应答发送超时的问题。控制指令数据接收和应答数据的发送都要经过控制器(类似网关)的转发,所以判断应答是控制器转发协议出现了延时。检查控制打印的出问题时间控制指令和应答的时间间隔发现控制器的发送也不存在超时500ms左右。

2023-08-03 14:02:43 349

原创 LwIP以太网在初始化过程中卡死整个程序的问题排查解决

在将程序优化等级改为不优化才很容易测出来hardfault问题,而在有优化的时候的,编译器可能优化了代码不容易出现问题,所以调试程序问题最好还是将优化等改为不优化,才更容易发现问题。

2023-08-02 09:52:34 1002

原创 LwIP RAW API TCP服务端客户端编程及问题

在测试过程中出现客户端连接上后又断开,一直在反复重连,调试很久一段时间发现是有因为没有。客户端应用程序主动调用tcp_close()终止一个TCP连接。用于服务端程序,在接收连接前必须让TCP处于监听状态。当TCP连接成功connected回调函数就会被调用。将本地的 IP 地址、端口号与一个控制块进行绑定。所以数据的处理和应用程序编写就在该回调函数中实现。TCP客户端使用该函数主动发起连接。用于服务端,处理客户端连接。客户端编程就比较简单了。

2023-06-29 13:52:41 2142

原创 LwIP RAW API 实现UDP多播收发

LwIP RAW API 实现UDP多播收发实现1、初始化static struct udp_pcb *multicast_pcb = NULL;static ip_addr_t mutlcast_send_ip;static ip_addr_t mutlcast_recv_ip;static void udp_recv_multicast(void *arg, struct udp_pcb *pcb, struct pbuf *p, const ip_addr_t *addr, u16

2023-06-17 16:40:42 2312 1

原创 移远通信笔试题

B)a=b=c+1;选项 A 是错误的,因为 b = 4 的结果是 4 ,所以 a =(b = 4) = 3 等价于 a = 3 和 b = 4 ,但是在 C 语言中,赋值操作返回被赋的值,因此(b = 4) 的结果是 4。然后再将 4 赋值给 b,使得 b 的值变成了 4。这时候再把 b = 4 和 a = 3 再进行一次赋值运算,就等价于(4 = 3) ,由于左值必须是可修改的,因此会产生一个编译错误。

2023-04-21 11:55:42 1573 1

原创 TMC2660驱动及调试记录

一款优秀的电机驱动芯片,驱动简单。或者直接看手册,手册也不复杂。

2023-02-12 01:28:14 2777 2

原创 NV040C语音芯片驱动调试

误以为所有地址都有声音,所以随便选择了一个地址进行调试,调试大半天都没有声音,误以为是时序问题调试了好久。后面发现是地址没有声音数据的。对于此次使用的芯片只定制了最开始的6个地址有声音,所以地址0x06及以上的都是没有声音的。动力系统项目定制的只有声音地址0x00~0x05有声音,分别对应不同报警等级。芯片某个声音地址是否有声音取决用户是否和厂家联系定制。芯片声音地址0x00-0xDF不是每个地址都有声音。

2023-02-08 11:46:39 850

原创 RTOS多任务切换实现

* `r0、r2、r3、r12`等寄存器的值中断触发会由自动保存。* `STMDB sp!, { lr }` , 在调用`SysTick_IRQ`函数前保存LR,LR此时是个特殊值,后续通过其触发硬件自动恢复自动恢复`r0、r2、r3、r12`等寄存器的值。为什么要保存LR?因为`SysTick_IRQ`是C函数,C函数调用会破坏原来的LR值。* `Thread_Switch_Context` 函数传入LR值,此时lr值是个特殊值,通过BX r1 触发硬件自动恢复r0、r2、r3、r12等寄存器的值。

2022-12-21 17:19:50 1125

原创 ThreadX笔记

任务优先级,数值越小优先级越高该函数需要用户自己定义,ThreadX启动会自动调用该函数,用户可以在该函数中创建自己的任务。first_unused_memory,未使用的地址空间,方便用户创建自己的动态内存管理。ThreadX提供了给用户创建内存池、内存块等进行动态内存分配的功能。3、ThreadX系统没有定义空闲线程如需要空闲线程需要用户自己定义ThreadX内核没有空闲任务,那么没有任务执行的时候它都在干什么:ports/cortex_m4/gnu/src/tx_thread_sch

2022-12-06 13:42:29 1264

原创 Vscode顶部显示搜索框和前进后退箭头键位

平常都是用快捷键进行前进、后退 & 搜索,有时候只想按用鼠标点击,所以希望显示搜索框和前进后退按钮这些。如图效果:在顶部栏显示搜索框和前进后退箭头键位。顶部栏空白地方右键,勾选。

2022-11-30 15:44:10 7304

原创 arm-none-eabi-gcc编译RT-Thread nano STM32F429工程出现的问题

总结来说就是bin文件时按照地址信息顺序生成代码段和可加载数据段的文件,自定义的SDRAM段默认属性时LOAD,也就是可加载的。程序链接时将该段人为可加载的数据段链接进程序造成bin文件特别大。所以修改段的默认属性为NOLOAD(} > SDRAM。

2022-09-20 14:30:15 594

原创 采用arm-none-eabi-gcc交叉编译工具链 以及使用xmake构建 STM32 RT-Thread nano工程 笔记

xmake.lua 如果是其他工程拷贝过来的,可以删除.xmake文件夹和build文件夹,或者执行`xmake f -c`强制清除配置缓存,主要是.xmake缓存了上一个工程的配置信息等,会编译失

2022-09-19 19:33:55 1618 1

原创 使用xmake配合arm-none-eabi-gcc构建stm32工程

使用这种方式开发适用于所有Cortex-M的芯片,不必受限于某个芯片的专用IDE,如STM32CubeIDE只能用于STM32。所用涉及的软件全为开源免费的软件。不用编写修改Makefile,构建项目容易。可以使用任意编辑器,可以是Vscode、source insight,甚至是记事本。推荐使用Vscode,Vscode内就可以打开终端执行编译,用其他编辑器可能就要另外打开powershell或bash之类的进行编译了。由于MDK armcc工具针对性做了优化,编译出来的代码尺寸相对较小;

2022-08-20 15:25:37 1923 2

原创 lvgl v8 linux下使用xmake交叉编译移植

针对linux移植lvgl官方已经提供了移植工程,只需要根据自己板子修改frambuffer的设备节点和设备节点。1、下载移植工程源码下载下来发现lv_drivers和lvgl目录是空的,对于这个问题直接去lvgl github仓库那里。...............

2022-08-13 18:39:12 1445

原创 lvgl 实现状态提示图标自动对齐补位显示

代码】lvgl 实现状态提示图标自动对齐补位显示。

2022-08-03 18:39:31 1048

原创 从0写bootloader — Bootloader重定位APP

一般情况下,不会采用APP重定位自己。假如APP程序存放在外接的SPIFlash或者SD卡上,SPIFlash和SD卡是不支持XIP的,APP代码无法执行,重定位代码也是APP代码的一部分,何谈重定位自己。此时就需要要采用Bootloader重定位APP的策略了。Bootloader重定位APP程序需要知道APP的加载地址和链接地址,但是Bootloader程序和APP一般在是不同Project的程序,无法直接得到加载地址和链接地址。...

2022-07-18 23:48:17 396

原创 从0写bootloader —— APP自重定位

使用的IDE为MDK。散列文件:Bootloader程序:APP程序:,打印数据为乱码,因为buf是全局变量,属于数据段,它的加载地址则是FLASH上,散列文件定义的数据段链接地址是 ,数据段的加载地址和链接不一致,所以需要重定位,而bootloader和APP都没有做重定位,所以打印出来是乱码。修改APP实现重定位数据段和清除BSS段: 在调用xmain之前重定位数据段 在调用xmain之前清除BSS段APP自我复制所有段实现重定位修改散列文件如下:加载地址是0x800

2022-07-13 20:35:47 335

原创 从0写bootloader — 最简单的bootloader和App

对于空间划分是人为定义的。启动文件start.s:最简单的启动,暂时不使用中断向量。如果是通过MDK设置链接地址,不勾选(不使用Target对话框的内存布局)遇到的问题:必须到导出中断向量全局可见,不然程序无法启动:链接地址通过散列文件指定: 这是创建工程默认创建的散列文件usart.c: 只使用串口打印简单的信息main.c:烧录程序上电运行,打印信息:bootloader正常运行。从自定义划分的地址看,APP开始的地址是这里为什么跳转使用的是呢?原因是STM32是Cortex-M

2022-07-09 20:12:51 1623

原创 从0写bootloader — bootoader功能知识

启动其他程序:对于单片机程序,一般不需要用Bootloader,直接就能运行APP。为什么还需要bootloader?当RAM、Flash比较小时,一般APP就在Flash烧写的地方执行,这种叫做,。APP程序去更新自己程序,那就把升级程序给覆盖,APP都执行不了了,升级失败,这种方式无法实现。当RAM比较大,可以将APP全部拷贝到RAM中执行,此时更新程序就会覆写Flash上的程序员,APP依然可以运行,但是一旦系统断电或者其他原因导致升级失败,系统复位重新上电后Flash中就没有程序可以拷贝到RAM

2022-07-09 20:11:25 924

原创 lvgl v8 obj支持滚动但不显示滚动条以及禁用滚动条

从lvgl v8版本开始,lvgl的obj默认开启了滚动条。对于滚动条一般有三种需求:第2种obj实现: 禁用滚动条第3种obj实现:

2022-07-05 10:21:48 7557 8

原创 RTOS 多线程下hardfault问题总结

使用minIni以INI文件形式保存系统参数到littlefs多线程下读写导致的hardfault问题0、通过RT-Thread自定义hardfault处理函数打印hardfault信息,发现hardfault发生在lvgl gui线程;1、通过调试器将hardfault打印的lr寄存器地址减去5回溯地址找到发生hardfault的语句为STM32 HAL库的SPI 传输函数,按道理库函数应该没问题,无法理解2、想到hardfault问题多是指针越界或堆栈溢出导致的,增大lvgl GUI线程堆栈,再次调试发

2022-06-24 16:17:45 521

原创 minIni移植到littlefs

minIni 是一个用于读取和写入 INI 文件的库。github :https://github.com/compuphase/minIniminIni特点:1、minIni 大约是 950 行代码 (包括注释),是一个真正的 “迷你” INI 文件解析器,非常容易移植到各种嵌入式平台。2、minIni 不需要标准 C/C++ 库中的 文件 I/O 函数,且允许通过宏配置要选择文件 I/O 接口。3、minIni 仅使用 stack ,完全不使用动态内存(malloc)。有 C++ binding,

2022-06-10 12:14:11 598 1

原创 linux线程间通信支持阻塞的消息队列实现

消息队列消息队列实现并不难。消息队列主要有两种实现方式:数组实现和链表实现。此处采用链表实现。由于实现并不能难,重写浪费时间,直接参考别人的就好了。Linux下消息队列实现Linux下的线程通信没有像RTOS下支持阻塞的消息队列。想要支持阻塞的消息队列就要自己实现了。实现可阻塞的消息队列需要用到pthread中的条件变量(pthread_cond_t )和互斥锁(pthread_mutex_t )。数据结构#define LIN_MSG_MAX_LEN 4096 /* max

2022-05-26 22:40:41 921

原创 ThreadX Levelx的移植和使用(nor flash)

LevelXAzure RTOS也就是ThreadX。Azure RTOS LevelX 向嵌入式应用程序提供 NAND 和 NOR 闪存提供实现磨损均衡的手段。由于NAND和NOR闪存都只能进行有限次数的擦除,均衡分配闪存的使用至关重要,这通常被称为磨损均衡,通过LevelX实现。这段话来自 Azure RTOS LevelX 用户手册。可以知道 Azure RTOS通过LevelX组件实现对NAND和NOR两种flash实现磨损平衡,LevelX组件只是一个组件,与任何硬件、文件系统

2022-05-07 10:40:13 2129 6

原创 Linux应用开发 ——看门狗编程

IMX6ULL上的看门狗ls /dev/watchdog*/dev/watchdog /dev/watchdog0<linux/watchdog.h> : watch的ioctl命令#define WATCHDOG_IOCTL_BASE 'W'#define WDIOC_GETSUPPORT _IOR(WATCHDOG_IOCTL_BASE, 0, struct watchdog_info)#define WDIOC_GETSTATUS _IOR(WATCHDOG_IOCTL

2022-05-03 06:33:25 1452

原创 linux应用开发 —— GPIO控制

GPIO 子系统linux将GPIO的控制抽象成了GPIO子系统。GPIO子系统支持把引脚用于基本的输入输出功能,其中输入功能还支持中断检测。GPIO子系统同样是通过sysfs文件系统控制。查看sysfs下的GPIO子系统内容:ls /sys/class/gpio/export gpiochip128 gpiochip504 gpiochip96gpiochip0 gpiochip32 gpiochip64 unexportGPIO子系统操作导出GPIOx,操作e

2022-05-02 23:28:56 4461

原创 linux应用开发 — 控制LED设备

控制LED设备的两种方式通过LED在/dev/下的设备节点控制sysfs 文件系统操作LED设备的属性文件控制 (LED设备驱动必须使用LED子系统实现)sysfs 文件系统sysfs 是一个基于内存的文件系统,同 devfs、proc 文件系统一样,称为虚拟文件系统,它的作用是将内核信息以文件的方式提供给应用层使用sysfs 文件系统的主要功能便是对系统设备进行管理,它可以产生一个包含所有系统硬件层次的视图……简单概括来说就是内核通过sysfs文件系统将内核对象(例如驱动)的属性通

2022-05-02 22:42:36 1253

原创 vscode宏定义跳转层级不对的问题

如下所示,点击ADC_CHANNEL_5宏定义跳转到ADC_CR1_AWDCH_Pos正确跳转应该是这样:误打误撞找到一个非常规的解决办法:删掉.vscode,Ctrl + shift + p --> C/C++ : 编辑配置(UI),重新生成.vscode,之后就可以正常跳转。后测试不重新生成.vscode也可以正常跳转。...

2022-04-13 15:00:19 2312 16

原创 BusyBox 构建根文件系统

BusyBox源码下载BusyBox 构建BusyBox根文件系统创建根文件系统存放目录:ares@ubuntu:~/work$ mkdir rootfs

2022-04-13 09:35:14 1544

原创 Linux 开发 | 构建ubuntu根文件系统

ubuntu根文件系统源码下载下载地址:Index of /http://cdimage.ubuntu.com/下载操作:ubuntu-base/ --> releases/ --> 16.04.6/ --> release/ --> ubuntu-base-16.04.6-base-armhf.tar.gz随便选择一个版本,这里选16.04.6用的芯片是IMX6ULL,所以需要选择arm架构的IMX6ULL带硬件浮点,所以选尾缀带hf的ubu

2022-04-10 13:11:18 562

原创 IMX6ULL 基于NXP官方Linux源码添加自己单板

编译NXP官方Linux内核每个板子都有默认配置文件,都保 存 在 arch/arm/configs目录下imx_v7_defconfig和imx_v7_mfg_defconfig 都可作为 I.MX6ULL EVK 开发板所使用的默认配置文件但imx_v7_mfg_defconfig编译出来的zImage可以使用MfgTool工具烧录配置编译: make_nxp_linux.shares@ubuntu:~/work/linux-imx-rel_imx_4.1.15_2.1.0_ga_opto$

2022-04-09 18:12:29 732

原创 IMX6ULL NXP官方原版u-boot添加自己单板

添加开发板默认配置文件

2022-04-09 18:11:06 513

原创 在内核目录中编译驱动与Kconfig

查看驱动目录下的makefile可以看到很多配置项linux\drivers\char\Makefile:obj-$(CONFIG_DTLK) += dtlk.oobj-$(CONFIG_APPLICOM) += applicom.oobj-$(CONFIG_SONYPI) += sonypi.oobj-$(CONFIG_RTC) += rtc.oobj-$(CONFIG_HPET) += hpet.oobj-$(CONFIG_EFI_RTC) += efirtc.oobj-$

2022-04-05 11:13:49 1517

原创 IMX6ULL NXP官方原版u-boot编译烧录体验以及出现的问题

编译guangjie@ubuntu:~/work/imx6ull/uboot-imx-rel_imx_4.1.15_2.1.0_ga_xgj$ cat make_imx6ull_emmc.sh#!/bin/bashmake ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distcleanmake ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_14x14_evk_emmc_defconfigmake

2022-04-04 18:28:33 885

原创 Linux 驱动 | hy46xx触摸屏驱动

hy46xx Touch IChy46xx是HYCON科技一款触摸IC。上电时序:通信接口:使用IIC通信中断方式:当INT引脚产生下降沿的时候,触摸数据就绪,这样就可以在中断中读取如果使用线程轮询方式获取触摸数据,则可以通过判断INT引脚是否为低电平来判断触摸数据是否就绪两种实现驱动方式:按照IIC设备驱动一般框架驱动芯片获取触摸坐标,这种方式的缺点:不兼容旧的或别人的触摸相关的应用程序按照内核input输入子系统框架来实现触摸驱动MT(Multi-touch)多点

2022-04-04 11:57:54 1470 1

原创 Linux下搜索技巧

1、搜索文件中的含有字符串的文件:grep "gpio-keys" * -nr命令解析:表示搜索当前目录下全部文件-nr 显示搜索的字符串所在的行号2、管道传递搜索grep "gpio-keys" * -nr | grep "\.c" | grep "imx"搜索包含gpio-keys和imx字符串的C文件通过|(管道符)传递前一个命令的结果给后一个命令3、搜索包含关键字的关键find -name "*gpio*key*"搜索包含gpio和key关键字的文件...

2022-04-01 21:31:14 332

LT8912B MIPI转HDMI/LVDS芯片手册

LT8912B MIPI转HDMI/LVDS芯片手册

2024-02-06

鸿蒙hdc工具和使用笔记

鸿蒙hdc工具和使用笔记,从鸿蒙系统开发环境中提取出来的独立的hdc工具以及使用笔记

2024-01-08

鸿蒙系统hdc工具的使用

鸿蒙系统hdc工具的使用

2023-12-22

打包好的SimpleGUI单色点阵取模工具,不需要自己编译源码

SimplePixelTools: 单色点阵取模工具 https://gitee.com/Polarix/SimplePixelTools SimplePixelTools设计为一款针对单色显示屏的文字字模转换工具。   该软件作为SimpleGUI生态中的一个辅助工具,也可独立使用。

2023-07-11

SimpleGUI精简字库的工具MinimumFontLib

SimpleGUI重编码精简字库的工具,在作者gitee上编译好的exe文件不能直接执行,缺少很多动态库,这个已经将这些库都打包好成这个执行文件,可以直接执行 MinimumFontLib: 一个用于精简单色点阵字库数据的工具 https://gitee.com/Polarix/MinimumFontLib 当然你也可以直接下载它的源码编译,就是比较麻烦

2023-07-08

基于事件的单片机程序

简单易用,支持IAR、MDK 1、编写好事件函数 void event(void) { printf("500ms \r\n"); } 2、调用EVENT_EXPORT(event,ONCE_EVENT,event);注册事件 event 事件名字 ONCE_EVENT 事件类型 event 事件处理函数 3、main函数while循环中调用void event_handle_loop(void) 4、产生事件调用函数void post_event(event) event 事件名字

2020-03-01

Win32API函数参考手册.zip

很好的WindowsAPI函数参考手册参考手册,详细介绍了每一个win32 API的使用。要windwos编程?这本书你值得拥有

2019-06-27

串口上位机波形.rar

好用的串口上位机波形,调试传感器数据利器。内有函数库,串口连接电脑,调用函数库函数发送电脑即可使用

2019-06-14

Linux环境编程图文指南.rar

好书推荐,入门学习linux系统编程的好书,有书籍和书中例程代码

2019-06-12

STM32_BootLoader工程及APP工程.zip

STM32_BootLoader工程及APP工程,可以根据需要稍微修改即可使用。

2019-06-12

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

TA关注的人

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