- 博客(74)
- 收藏
- 关注
原创 ART-PI开发套件-构建开发环境
env 是 RT-Thread 推出的开发辅助工具,针对基于 RT-Thread 操作系统的项目工程,提供编译构建环境、图形化系统配置及软件包管理功能。其内置的 menuconfig 提供了简单易用的配置剪裁工具,可对内核、组件和软件包进行自由裁剪,使系统以搭积木的方式进行构建。下载解压后,可以双击打开软件,绿色版本无需安装。在任意文件夹下通过右键菜单来启动 Env 控制台啦。
2023-11-25 15:47:03 568
原创 rt_thread-tftp设备端作为客户端上传与下载文件
为了支持tftp 客户端功能,需要调整两个地方代码,原代码运行存在问题。文件系统移植的是littlefs 文件系统。TFTP(Trivial File Transfer Protocol,简单。有时需要我们手动获取与下载文件,那么tftp协议比较简洁。a.调整netutils-v1.3.1\tftp\。之间进行简单文件传输的协议,提供不复杂、开销不大的。选择合适的软件版本netutils-v1.3.1。b.修改 littlefs 文件 系统的头文件。)是TCP/IP协议族中的一个用来在客户机与。
2022-12-20 17:49:01 892 1
原创 vscode+gdbserver开发软件方法
进行嵌入式 Linux 开发, 更多的是进行 GDB 远程调试。GDB 远程调试与本地调试相比,多了远程连接这一步。的与之对应的 GDB,对于 ARM 嵌入式 Linux 而言,通常是 arm-linux-gdb。进行远程 GDB 调试, 首先需要在目标系统中启动 gdbserver, 这就要求部署的目标板文。GDB 远程调试需要两个程序,一个是目标机的 GDBServer,另一个是运行于本地机器。GDB 既可以在本地调试,也可以进行远程调试。● 运行程序,还可以给程序加上某些参数,指定程序的行为。...
2022-08-04 17:42:28 596 2
原创 ffmpeg3.0移植到imx6ull运行第一个程序的记录步骤
ubuntu16 默认安装好了交叉编译器arm-linux-gnueabihf-gcc下载ffmpeg3.0 解压进入到文件进行配置如下:./configure --prefix=/home/vmuser/ffmpeg/ffmpegFileInstall --enable-shared --disable-yasm --disable-stripping --enable-pic --enable-shared --enable-pthreads --cross-prefix=arm-linux-gnuea
2022-06-08 16:47:02 261
原创 ffmpeg-编译执行
#include #include int main(int argc,char* argv[]){ av_log_set_level(AV_LOG_DEBUG); av_log(NULL,AV_LOG_INFO,"...Hello world:%s %s\n",argv[0],argv[1]); return 0;}编译: gcc -o ffmo program9.c -I /usr/local/ffmpeg/inclu
2022-06-07 15:43:51 212
原创 ubuntu 16.04 安装 ffmpeg 4.3
ubuntu 16.04 安装 ffmpeg 4.3https://blog.csdn.net/jian200801/article/details/107638758step0: 下载源代码https://launchpad.net/ubuntu/+source/ffmpegstep1:sudo apt-get -y install autoconf automake build-essential cmake git-core libass-dev libfreetype6-dev libsdl2
2022-06-06 19:46:40 651
原创 VI编辑器的基础使用
Linux 用户经常需要对系统配置文件进行文本编辑, Vi 编辑器可以对文本进行编辑、删除、查找和替换、文本块操作等,全部操作都是在命令模式下进行的。 Vi 有两种工作模式:命令模式和输入模式。Vi 编辑光标 h 左- L右 J下 K上命令模式编辑命令(i/I、 a/A、 o/O), Vi 左下角将会提示“插入”字样:wq 保存与退出:q!: x 删除某个字符...
2022-05-24 13:42:10 76
原创 socket实现非阻塞网络通信实现
一、select函数select() 可以阻塞地同时探测一组支持非阻塞的 I / O 设备是否有事件发生(如可读,可写,出现异常等等),直至某一个设备触发了事件或者超过了指定的等待时间。此时我们可以把需要的数据源通道放到 select 的探测范围内,只要相应的数据源准备好 select 就会返回,这时就能无阻塞地读取到数据。select()函数原型及介绍如下所示int select(int nfds, fd_set* readfds, fd_set* writefds, fd_set* erro
2022-03-17 11:14:32 1084
原创 QT5 信号与槽实现UI线程与子线程交互
一、信号与槽的实现代码如下#include "mainwindow.h"#include "ui_mainwindow.h"#include "mythread.h"#include <QtDebug>MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow){ ui->setupUi(this); //工作线程--->
2022-02-28 18:14:09 1253
原创 mqtt 移植ALPHA I.MX6U Linux 开发板
一、第三方开源mqtt 软件包介绍 kawaii-mqtt软件包: 基于socket API的MQTT客户端,拥有非常简洁的API接口,以极少的资源实现QOS2的服务质量,并且无缝衔接了mbedtls加密库。 开源库: https://github.com/jiejieTop/mqttclient二、动态库的制作 默认已经安装好编译环境,详细请看【正点原子】 I.MX6U 嵌入式 Linux 驱动开发指南 V1.x.pdf 的第 4.3 小...
2021-11-17 10:51:19 710
原创 GCC的使用
GCC(GNU Compiler Collection, GNU 编译器套件),是由 GNU 开发的编程语言编译器。 GNU 编译器套件包括 C、 C++、 Objective-C、 Fortran、 Java、 Ada 和 Go 语言的前端,也包含了这些语言的库(如 libstdc++、 libgcj 等)。GCC 编译器的编译流程是:预处理、编译、汇编和链接。预处理就是展开所有的头文件、替换程序中的宏、解析条件编译并添加到文件中。编译是将经过预编译处理的代码编译成汇编代码,也...
2021-11-09 09:49:22 1661
原创 MFC-VS2019-定时器使用
一、定时器直接添加二、代码添加SetTimer(1, 1000, NULL);//定时器1三、测试验证//定时器 1svoid CDevDlg::OnTimer(UINT_PTR nIDEvent){ // TODO: 在此添加消息处理程序代码和/或调用默认值 TRACE("\r\n time_record_tick:%d s \r\n", time_record_tick); if (++time_record_tick >= 99999)time...
2021-08-10 11:27:43 2335
原创 字符集小记
总结在写一个上位机界面测试平台遇到的字符集问题。首先在使用的是win10平台 VS2019 MFC开发。1.vs2019界面配置:字符(Character)是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。字符集(Character set)是多个字符的集合,字符集种类较多,每个字符集包含的字符个数不同,常见字符集名称:ASCII字符集、GB2312字符集、BIG5字符集、 GB18030字符集、Unicode字符集等。计算机要准确的处理各种字符集文字,就需要进行字符编码,以便
2021-04-26 20:22:12 109
原创 分享自己编写的RT_thread 串口应用超声波测距验证
/* 硬件接口说明: PC10 ------> UART4_TX PC11 ------> UART4_RX Y401(US-100) 接口定义: 模式选择:串口模式(有跳帽) 1 Pin: 接 VCC 电源(供电范围 2.4V~5.5V)。 2 Pin: 当为 UART 模式时, 接外部电路 UART 的 TX 端;当为电平触发模式时,接外部电路的 Trig 端。 3 Pin: 当为 UART 模式时, 接外部电路.
2021-02-26 15:03:40 808
原创 我的嵌入式开日记---生产者与消费者问题
生产者-消费者(producer-consumer)问题是一个著名的进程同步问题。它描述的是:有一群生产者进程在生产产品,并将这些产品提供给消费者进程去消费。为使生产者进程与消费者进程能并发执行,在两者之间设置了一个具有 n 个缓冲区的缓冲池,生产者进程将它所生产的产品放入一个缓冲区中;消费者进程可从一个缓冲区中取走产品去消费。尽管所有的生产者进程和消费者进程都是以异步方式运行的,但它们之间必须保持同步,即不允许消费者进程到一个空缓冲区去取产品,也不允许生产者进程向一个已装满产品且尚未被取走...
2020-08-05 19:48:12 837
原创 keil5 生成bin的方法
方法1:C:\Keil_v5\ARM\ARMCC\bin\fromelf.exe --bin -o ..\MDK-ARM\sysled\sysled.bin ..\MDK-ARM\sysled\sysled.axf语法:fromelf.exe绝对路径+空格+--bin(注意是两个短横的)+空格+--o(两短横)+空格+../输出目录相对路径+空格+名字.bin+空格+../输出目录相对路径+空格+名字.axf方法2:cmd命令直接运行...
2020-07-24 09:29:36 350
原创 stm32cubemx移植RT-Thread Nano过程
记录移植的步骤,目的是移植到stm32H750VB芯片实现LED基本功能,与控制台调试。工具stm32cubemx 5.0以上参考资料,官网基于 《基于 CubeMX 移植 RT-Thread Nano》1 选择合适的mcu,这里stm32H750VB ROM:128K RAM 1M2. 配置好外部时钟3.Nano pack 安装RT-Thread Nano 软件包,需要在 CubeMX 中添加https://www.rt-thread.org/download/c...
2020-07-16 21:34:35 2775 3
原创 C写txt文本片段
char onehisdata[]="vol :10.32, temp:32.56 PI:2559\r\n";void save_one_data(void){ FILE *fp=fopen("mytesthisdata.txt","a"); int i; //char ch; if(fp!=NULL) { printf("open his data txt is Ok\r\n"); for(i=0;i<size...
2020-07-10 10:37:54 180
原创 结构体内存大小计算
#include<stdio.h>typedef unsigned long u32;typedef unsigned int u16;typedef unsigned char u8;typedef struct{ u8 flag; u16 BatVoltage; u32 InfraredCnt;//红外检测计数}T_his_data_item_a;typedef struct{ .
2020-07-09 09:46:41 621
原创 一次数组越界笔记
定义全局变量程序运行正常接收数据,全局变量也正常使用。系统申请了1K内存RAM,同时初始化可观察到 执行memset的时候,把全局变量清空为0.经过验证分析,是因为栈区(stack):由编译器自动分配和释放,存放函数的参数与返回值、局部变量等,其操作方式类似于数据结构中的栈。分配太小导致。有太多在局部变量进行使用,容易导致类似问题。调节栈区(stack)如下:旧值为0x400,修改后如下 0x800.再次验证后。不会清空。知识...
2020-07-06 19:20:49 137
原创 STM32CubeMX-内部RTC功能验证实录
1.cubeMx基础配置2.参数配置 24小时格式,默认分频系数,不采用BCD编码方式3. 时钟配置 外部时钟 32.7684.生成代码5.系统默认初始化添加代码,实现系统重启设备,时间不被初始化,同时初始化首次上电填充时间6.日期读写API//读年月日时分秒,十进制void get_date(unsigned int *yy,unsigned int *mm,unsigned int *dd,unsigned int *hh,unsigne...
2020-07-02 16:28:55 1058
原创 日期转换的算法验证
#include <stdio.h>#include <stdlib.h>unsigned long seconds_since1970(int yr,int mn,int day,int hh,int nn,int ss);unsigned long days_since1970(int yr,int mn,int day);static unsigned long days_since_common_era(int yr,int mn,int day);..
2020-07-01 14:57:22 1189
原创 线程同步之事件机制基础使用
void myReceiveChar(void){ COMSTAT commstat;//这个结构体主要是用来获取端口信息的 HANDLE hlocEvent; DWORD dwError; DWORD dwMask; DWORD dwLength; DWORD dwByteReaded; DWORD i; uint8_t byRecBuf[4096]; OVERLAPPED overlapped; //OVERLAPPED结构体用来设置I/O异步,具体可以参见MSDN me..
2020-06-30 09:16:17 260
原创 volatile的重要性实例记录-错误日记
在编写串口上位机过程,使用了状态机,但是状态值添加修饰符volatile与没有添加修饰符volatile是非常影响的。以往在单片机方面编写总是习惯性添加,但是上位机没有添加。接下来看看添加与不添加的效果。未添加的代码定义变量变量打印使用后修改状态机值功能调用代码观察实际输出效果 8,3,3,也就是说第一次使用的时候,直接读取的是中间缓存的值。如果添加了修饰符...
2020-06-29 15:54:15 151
原创 C语言小数点数字运算
//userVolumeData:0---100 协议音频量化值转换为真实系数static float ConvertVolumeFactor(u8 userVolumeData){ float vol=0; if(userVolumeData>100 || userVolumeData<0) { printf("userVolumeData is ERR\n"); return 0; } vol=((float)userVolumeData)*5*0.01;.
2020-06-28 16:43:08 6686
原创 移植SFUD与测试验证-基于stm32cubemx5.0
1.时钟的配置主时钟为80M2.配置QUSPI接口,同时使能上拉3.QUSPI参数配置,开启全局中断4.生成工程文件5.下载SFUD文件,提供下载地址https://github.com/armink/SFUD6.添加printf重定向与us延时函数,用于系统调试和移植。7.添加SFUD文件,需要添加相应了路径8.底层函数移植,只需修改两个文件9.头文件sfud_cfg.h修改实例10.核心接口.c示例源码#include.
2020-06-26 16:37:49 1212
原创 我的数组越界问题小记
static void ACTION(void){ u8 buff[512]; u32 len=0; memset (buff,0,sizeof buff); len=EEPROM_ReadLenByte(WORDS_ONE_EEPROM_ADDE,4); if(len>512 || len==0) //防止数组越界 { printf("ACTION ERR\n"); if(len==0) printf("len is 0 \n"); i.
2020-06-23 11:04:10 193
原创 stm32实现HAL方式硬件SPI基础驱动
SPI总线的传输速度比IIC速度快,故通常追求速度常常采用硬件SPI进行传输数据。下面记录了利用stm32cubeMx配置硬件SPI1,外设是W25x16,这次主要是实现对该IC的ID读取。
2020-03-05 19:05:19 5786 3
原创 函数printf() 重定向,串口调试
在嵌入式开发中,我们经常使用串口打印进行调试,printf()函数是一个非常实用输出函数。接下来我们在stm32开发过程中,基于keil5环境配置。结合stm32cubeMX配置串口,快速实现该该函数。首先是利用stm32cubeMX配置串口相关参数,然后配置好keil5环境,最后添加相关代码实现。 1.stm32cubeMX配置串口 配置串口1152...
2020-03-05 14:01:12 947 1
原创 利用信号量等待超时实现串口接收
/* 接收数据回调函数 */static rt_err_t NetDev_input(rt_device_t dev, rt_size_t size){ /* 串口接收到数据后产生中断,调用此回调函数,然后发送接收信号量 */ rt_sem_release(&NetDev_COM_rx_sem); return RT_EOK; }//NetDev字节读取...
2019-12-20 09:58:38 1197
原创 stm32hal IO控制
int main(void){ /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ /* MCU Configuration--------------------------------------------------------*/ /* Reset of all peripherals, Initializes th...
2019-10-07 14:59:17 768
原创 一种串口接收完成判断方法
void UsartReciveFlag(USART_INFO *usartInfo){ while(1) { //如果接收计数为0 则说明没有处于接收数据中,所以直接跳出,结束函数 if(usartInfo->usartLen == 0) break; //如果上一次的值和这次相同,则...
2019-09-04 09:06:33 12590 1
原创 RTT-信号量随笔
信号量有点类似全局变量标志,但是应用有差别。 struct rt_semaphore sem_test; 初始化一个静态信号量 if(rt_sem_init(&sem_test,"test",0,RT_IPC_FLAG_FIFO)==RT_EOK) { Usar...
2019-08-14 08:58:25 453
原创 EEPROM数据存入与读取
各种类型的数据存储在EEPROM的时候注意事项:利用AT24C04存储与读取各个类型的数据操作一种方法是直接存储一种方法是间接存储
2019-04-07 00:01:09 10066 1
原创 位操作与直接赋值的易错点
//串口引脚切换//参数说明 port :串口号 ConfigPin :引脚指定void UartChangePin(u8 port,u8 ConfigPin){ if(0==port) { /* // P_SW1 = 0x00; //RXD /P3.0, TXD /P3.1 // P...
2019-03-26 16:41:27 625
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人