- 博客(50)
- 资源 (3)
- 收藏
- 关注
原创 嵌入式C中的实用技巧
本次给大家分享几个嵌入式C中的实用技巧。1、动态绑定、回调函数回调函数可以达到动态绑定的作用,在一定程度上可以降低层与层之间的耦合。可能很多初学的小伙伴可能还不理解回调函数,可以借助下图来理解:正在上传…重新上传取消一般函数调用的顺序都是上层函数(调用者)调用下层函数(被调用者)。而通过上图我们可以看到下层模块的函数2调用了上层模块的函数3,这个调用过程与一般的调用过程相反,这个过程叫做回调,这里上层模块的函数3就是回调函数。回调函数的表现形式是函数指针。C库stdlib.h中带有一个排
2024-09-06 11:26:32
407
原创 内存泄漏的影响
内存泄漏(Memory Leak)是指程序中已动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。特点隐蔽性 因为内存泄漏的产生原因是内存块未被释放,属于遗漏型缺陷而不是过错型缺陷积累性 内存泄漏通常不会直接产生可观察的错误症状,而是逐渐积累,降低系统整体性能,极端的情况下可能使系统崩溃。最直观的问题就是为什么我们的程序开始运行好好的,过段时间就异常退出。
2024-09-06 11:26:08
1211
原创 嵌入式工程师职业方向
但是产品经理不行,他得和市场、销售配合,先了解市场上需要什么,竞争对手是哪些,我们的优势是什么,如果切到细分市场下,产品本身是不是赚钱,还有没有机会进入,这都是产品经理要干的事。一般来说,开发经理还会负责招聘、培训、考核的任务,从技术上来说,开发经理应该是最强的,他基本上是技术开发的最后一道防线。这个中间,他会遇到各种个样的问题和困扰,操作系统要学、数据结构要学、网络要学、驱动要学、上层软件移植要学、电路要学、芯片手册要学,基本上从入门到精通之前,他应该都在学习的过程当中。学习本身是一件有意义的事情。
2023-11-20 08:29:49
214
原创 OTA设计思路
并在网关和 Wi-Fi 都在线的环境下,按下按键,动态场景就会联动调光开关、窗帘开关,对灯具的亮度或窗帘开合百分比进行自动调整。如今,控制智能产品的外部媒介越来越多样化,如 App、智能音箱、语音控制等,已经成为相当主流的控制方式。开发过程中,如有遇到任何问题,欢迎登录文档中心查看完整开发攻略,或登录TuyaOS-Zigbee 设备开发论坛进行提问,将有开发小哥哥随时为你解答~,它是属于 TuyaOS 系统的一个子集,该框架基于业务包的概念所设计,提供了产品级的能力,同时高度封装 Zigbee 协议栈。
2023-11-10 09:00:39
483
原创 串口实用解说
所以,基于串口的通信,除了一些通用的通信协议(比如:Modubs、MAVLink)之外,很多时候,工程师都会根据自己项目情况,自定义通信协议。校验码是一个比较重要的内容,一般正规一点的通信协议都有这个选项,原因很简单,通信很容易受到干扰,或者其他原因,导致传输数据出错。当然,实现的同时,需要考虑你项目实际情况,比如通信数据比较多,要用消息队列(FIFO),还比如,如果协议复杂,最好封装结构体等。自定义通信协议,代码实现的方式有很多种,怎么说呢,“条条大路通罗马”你只需要按照你协议要写实现代码就行。
2023-11-02 09:17:14
206
原创 如果让ChatGPT来写代码他会怎么写
今天突发奇想想试一下如果让ChatGPT来写51代码会怎么样呢?今天我们就一起来看一下他会怎么写51代码,机器人写出来的代码到底可不可以运行?在开始之前我们首先让ChatGPT做一个自我介绍吧!ChatGPT介绍一下自己吧!当然,我很乐意介绍自己!我是ChatGPT,是一款基于人工智能技术的自然语言处理模型,由OpenAI公司开发。我的全称是"Conversational Generative Pre-trained Transformer",简称"GPT",目前最新的版本是GPT-3。
2023-05-05 14:28:17
6497
1
原创 C结构简单而不失强大的表格
另外一个常见用到表格的例子是消息地图(Message Map),它在通信协议栈解析类的应用中非常常见,在很多结构紧凑功能复杂的bootloader中也充当着重要的角色。找到条目后做一系列所谓的“把关工作”,比如检查权限啊,检查数据有效性啊之类的——这些部分都是具体项目具体实现的,并非访问表格所必须的——放在这里只是一种参考。现在跟某一个消息地图(数组)绑定死了,如果要让它支持其它的消息地图(其它数组),就必须想办法将其与特定的数组解耦,换句话说,在使用。同时,数组的访问形式又进一步简化了用户代码。
2023-05-05 13:56:33
315
原创 【无标题】
由于使用了更高级的API和库,Arduino可能会占用更多的资源,例如内存和处理器时间。- 它是ESP32官方的开发框架,提供了更多底层控制和灵活性,适合需要高度定制化的项目。- 对于初学者来说,Arduino更易于上手,具有更友好的用户界面和更简单的API。ESP-IDF和Arduino都是用于开发ESP32的工具,它们各有优点和缺点。- Arduino的灵活性有限,对于需要更高级控制的项目可能会有局限性。- Arduino有大量的库和示例可供使用,可以大大缩短开发时间。
2023-04-01 13:23:54
211
原创 linux进程解析
一、进程基本概念进程是计算机里面最重要的概念之一。操作系统的目的就是为了运行进程。那么到底什么是进程,操作系统又是如何实现进程和管理进程的呢?1.1 进程与程序进程是程序的执行过程。程序是静态的,是存在于外存之中的,电脑关机后依然存在。进程是动态的,是存在于内存之中的,是程序的执行过程,电脑关机后就不存在进程了。进程的内容来源于程序,进程的启动过程就是把程序从外存加载到内存的过程。程序文件是有格式的,UNIX-Like操作系统的通用程序文件格式是ELF。程序文件是从源码文件编译过来的,源码文件很多是用C或者
2022-08-19 08:54:07
667
原创 开发记录信息1
AT+QISEND=0,0+QISEND: 17,17,0后面17,是发送字节17后面17,是服务器接收17字节后面的0 代表没有接收到数据AT+QIOPEN=1,0,"TCP","220.180.28.22",8305,0,01代表激活的场景0为路,连接数8305服务器端口后面的0代表自动分配的口后面的0代表接入模式有4种模式查询状态AT+QISTATE=1,0...
2022-01-26 14:29:57
1355
原创 产品设计经验谈
我写这篇文章的目的,是用本人20年的嵌入式经验呈现给大家一副完整的产品,项目开发蓝图,用本人多年的经历总结了一些教训无私的分享给各位,希望各位今后能站在本人的肩膀之上,少走弯路,多为公司,为个人多做贡献,那我的愿望就达到了,也同时希望能看到大家反馈和回复,留个脚印,留下你的见解和智慧,为后人乘凉打点基础,先在这谢谢各位了。那么由此开始我们充满知识的旅程吧,最重要的一点,就是在一个产品或项目的开发过程中,如果没有明确的目标,那么成功将无从谈起,做任何事的第一步必须明确目标。与日常生活中的大...
2021-08-07 14:17:45
469
原创 广角扭曲校正
static ER DCE_IQparam(IQS_FLOW_MSG MsgID, DCE_SUBFUNC *subf,IPL_HAL_GROUP* group){ UINT32 ISO_Value, Zoom_Value, SenMode_Value,IMEffect_Value; IMEffect_Value = IPL_AlgGetUIInfo(IPL_SEL_IMAGEEFFECT); ISO_Value = IQS_GetISOIdx(MsgID); Zo...
2021-05-13 13:39:18
155
原创 嵌入式设计模式
工作有些年了,每每看到一些朋友会问,设计模式需要学吗?好像做嵌入式的从没遇到过需要用设计模式的,所以一直没系统学习,但是我也知道这个很重要,久而久之,到头来还是没学。这里我说一下自己的看法和思考,来看看一些问题。什么是设计模式?设计模式是代表了开发人员不断积累的最佳的实践,是软件开发人员在软件开发过程中面临的一般问题的最优解决方案。也就是说,经过了不断的发展,不同的问题或者方案有对应的一套法子,而这个法子被总结成了这么几十种通用模式,我们如果遇到了就对应着去套用就可以了。当然那几大开发原
2021-04-01 11:36:29
350
原创 tcp连接流程
uart2_putString("AT+QURCCFG=\"URCPORT\",\"uart1\"\r\n"); Delay_DelayMs(1000); uart2_putString("AT+QCFG=\"urc/ri/other\",\"pulse\",120,1\r\n"); Delay_DelayMs(1000); uart2_putString("AT+QCFG=\"urc/ri/other...
2021-03-30 15:21:12
215
原创 Linux device tree 简要笔记
第一、DTS简介在嵌入式设备上,可能有不同的主板—它们之间差异表现在主板资源不尽相同,比如I2C、SPI、GPIO等接口定义有差别,或者是Timer不同,等等。于是这就产生了BSP的一个说法。所谓BSP,即是是板级支持包,英文全名为:Board Support Package。是介于主板硬件和操纵系统之间的一层。每一个主板,都有自己对应的BSP文件。在kernel/arch/arm/mach-* 目录下,放置着不同主板的BSP文件,比如展讯的某一个项目的BSP文件为:1 kernel/arch/arm/
2021-02-23 15:03:43
228
原创 linux学习路线
学习路线上面说了 Linux 服务器开发的前景和学习方式,接下来再说一下学习线路。1) 语言&工具C语言和C++是传统的 Linux 开发的语言,需要掌握。除了基本的语法,还要玩转一套工具链。经典的组合是 GCC(编译器)+ Make/Makefile(构建中大型项目必须的工具)+ GBD(调试器)+Valgrind(内存分析工具)+ Vim/EMACS/Gedit/Sublime Text(编辑器)。现在有越来越多的新项目使用 Clang/LLVM 来构建了,例如 Android.
2021-02-19 16:02:19
107
原创 8266wifi模块成功调试流程
********************************以模块为路由,笔记本为station模式,笔记开启tcp server 测试ok。流程1模块 AP 模式下做 TCP serveAT+CWMODE=2 开启 AP 模式(串口助手)AT+CWSAP="ESP8266","0123456789",11,0 设置模块的 wifi 和密码(串口助手)AT+CIPSTART="TCP","192.168.4.3",808...
2021-01-28 14:22:03
1529
原创 Linux库概念,动态库和静态库的制作,如何移植第三方库转载韦东山
一口君中学阶段最喜欢的一首歌。窦仙才华横溢、潇洒不羁、与世无争,酷的外焦里嫩!让我们随着窦仙高昂的声音来学习什么是(酷)库吧!一、什么是库?在windows平台和linux平台下都大量存在着库。一般是软件作者为了发布方便、替换方便或二次开发目的,而发布的一组可以单独与应用程序进行compile time或runtime链接的二进制可重定位目标码文件。本质上来说库是一种可执行代码的二进制形式,这个文件可以在编译时由编译器直接链接到可执行程序中,也可以在运行时由操作系统的runtime en
2021-01-28 08:31:57
350
原创 quectel模块增加发送功率流程
1、查询模块目前的频段,下面的频段是3频段。2、读到频段的信号为e8转化为十进制除以10就是23.2dbm的增益正在上传…重新上传取消3、AT+QNVFW="/nv/item_files/rfnv/00020994",0100F500指令修改增加增益。Power dBm 21 21.5 22 22.5 23 23.5 24 24.5 Value HEX D2 D7 DC E1 E6 EB F0 F5
2021-01-22 15:56:52
1329
1
原创 gui传送事件
Ux_SendEvent(&UIPlayObjCtrl,NVTEVT_PLAYPREV,0); //查看前一文件Ux_SendEvent(&UIPlayObjCtrl,NVTEVT_PLAYSINGLE, 2, PB_SINGLE_PREV, cutfilenum-fileoffset);//获取第前几张照片
2020-12-23 16:51:22
85
原创 mips-4.4-305-mips-sde-elf在win10安装报错
安装编译环境的时候 mips-4.4-305-mips-sde-elf 报错。解决办法:使用右键兼容性疑难解答方式来进行安装。
2020-12-07 14:32:43
451
原创 RT-Thread 多线程学习
多线程是实时操作系统里面最重要的知识点之一,要学习RTOS,多线程是必须(没错,是必须)要熟练掌握的内容,只有熟练掌握多线程的使用,才能在平时的项目工作里面用好实时操作系统。关于多线程的使用和管理,RT-Thread官方提供了比较丰富的文档作为参考,具体内容可以查看以下链接:https://www.rt-thread.org/document/site/programming-manual/thread/thread/本文是对RT-Thread多线程学习后的总结,并尝试从如图所示的以..
2020-12-02 15:37:59
1247
原创 转载韦工的处理办法
今天跟同事看一个TP驱动,上电后日志都正常,但是触摸没反应,然后开始排查。上电后可以正常读到芯片的chip ID,那说明I2C是通讯正常的,也可以说明触摸芯片的供电也是正常的。基于这个,我搬来示波器,测量中断引脚的信号,发现两个现象1、从休眠到唤醒状态后,中断脚有波形,而且波形上看不出异常。2、中断处理函数没有跑进去—— 触摸屏的dts文件编写如下文件:arch/arm/boot/dts/inxxx.dtscap_touch@14{compatible=...
2020-11-30 09:03:18
301
原创 配置nfs
配置nfs sudo vim /etc/exports 在末尾一行加入/home/nfs *(rw,sync,no_root_squash,no_subtree_check) 3 注意:修改后,要在linux中断 运行exportfs -rv 使配置文件/etc/exports 生效 ;设置 /home/nfs目录权限sudo chmod 777 /home/nfs -R 4 重启服务:#sudo /etc/init.d/rpcbind r...
2020-11-18 22:00:07
146
原创 ubuntu设置samba
sudo apt-get install samba安装完成之后新建共享目录sudo mkdir /home/share改变共享目录权限sudo chmod -R 777 /home/share配置sambasudo gedit /etc/samba/smb.conf在文件末尾[share]comment=this is Linux share directorypath=/home/sharepublic=yeswritable=yes添加samba用户..
2020-11-18 21:42:35
150
原创 wifi模块设置的流程
以电脑为服务器,8266为sta模式,连接AT+CWJAP="ESP8266","15019286***" //登陆路由AT+CIFSR //查自身的ip地址AT+CIPMUX=0 //单连接模式AT+CWMODE=1 //sta模式AT+CIPSTART="TCP","192.168.4.1",8089 //连接服务器AT+CIPMODE=1 //透传AT+CIPSEND //AT+SAVETRANSLINK=1, ”192....
2020-11-06 17:12:29
960
原创 2440挂载u盘tf卡
如下图所示,qt 启动之后,在超级终端中使用命令“mknod/dev/sda1 b 8 1”创建 U盘的设备节点,如下图所示。插入 U 盘之后,如下图所示插入 U 盘之后会弹出加载信息。在超级终端中使用命令“mount /dev/sda1/mnt/udisk/”即可挂载 U 盘。如下图所示。使用查找命令“ls /mnt/udisk”,可以看到 U 盘中的内容。下图中绿色文件是作者在 U 盘中建的一个小文件,这里可以看到。11.3.3.2 linux QT 系统下挂载 tf..
2020-10-26 11:05:56
244
原创 2020-10-23
#include <stdio.h>#define SIZE 81char *stringIn(char *str1, char *str2);int main(void){ char string1[SIZE]; char string2[SIZE]; char *p; printf ("输入一个字符串:\n"); gets(string1); while (*string1 != 'q') { print...
2020-10-23 15:34:23
68
原创 2020-09-09
(1)volatile是轻量级同步机制。在访问volatile变量时不会执行加锁操作,因此也就不会使执行线程阻塞,是一种比synchronized关键字更轻量级的同步机制。(2)volatile**无法同时保证内存可见性和原子性。加锁机制既可以确保可见性又可以确保原子性,而volatile变量只能确保可见性**。(3)volatile不能修饰写入操作依赖当前值的变量。声明为volatile的简单变量如果当前值与该变量以前的值相关,那么volatile关键字不起作用,也就是说如下的表达式都不是原子操作
2020-09-09 16:54:22
61
原创 2020-09-07
基于 Video4Linux 的 USB 摄像头图像采集实现 Write by daily3(戴小鼠) 著作权:戴丽(合肥工业大学) (email:daily3@126.com) 做了一段时间的摄像头图像采集,有了一些心得。在论坛上开的2410摄像头 问题专贴(http://www.hhcn.com/cgi-bin/topic.cgi?forum=1&topic=247&show=0) 也得到了大家的关注。在此,我将这一阶段遇到的问题,解决方法等做个总结, 希望...
2020-09-07 09:00:35
398
原创 2020-09-02
FIND_DATA findData; FS_SEARCH_HDL pSearch = NULL; UINT8 *pch = NULL; UINT32 fileCnt = 0; UINT8 delfilename[64] = {0}; pSearch = FileSys_SearchFileOpen("A:\\DCIM\\100BMCIM\\", &findData, KFS_FORWARD_SEARCH , NULL);//打开文件...
2020-09-02 13:14:38
115
原创 文件系统查找文件夹下,找到文件删除文件。
FIND_DATA findData; FS_SEARCH_HDL pSearch = NULL; UINT8 *pch = NULL; UINT32 fileCnt = 0; UINT8 delfilename[64] = {0}; pSearch = FileSys_SearchFileOpen("A:\\MM\\", &findData, KFS_FORWARD_SEARCH , NULL);//打开文件夹 ...
2020-07-29 10:57:36
172
原创 win7解决gcc不是内部或外部命令,也不是可运行的程序或批处理文件的问题
解决方案需要安装MinGW并且配置环境变量才行。1. 在如下网址下载MinGWhttps://sourceforge.net/projects/mingw/下载之后是一个名为mingw-get-setup.exe的文件,双击安装。2. 安装MinGW将MinGW安装在D:\mingw文件夹下(可自由选择,这里为之后添加环境变量作为范例)安装好后选择需要下载的安装包,选择All packets->MinGW->MinGW Base System->MinGW C
2020-05-21 10:51:54
6141
3
CCNA五天培训教程精选(下)
2008-09-11
CCNA五天培训教程精选(上)
2008-09-11
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人