- 博客(36)
- 收藏
- 关注
原创 ESP8266接收数据UTF8转换为GBK2312
通过实验发现,ESP8266从MQTT读取的数据通常为UTF-8编码,但是项目需求,需要将UTF-8转换为GBK2312进行输出。网上资料过于少或者过于复杂。在这里给大家分享一种稍微方便一点的。实现原理大致就是通过把UTF-8编码转换为Unicode,再通过映射表,找到对应的GBK2312编码。编码内容过长,不便展示,请私聊我获取。
2024-08-18 21:40:21
246
原创 关于FreeRTOS使用相关API函数导致程序阻塞的问题
那说明可能不是某个函数的问题,或者某个参数的问题。可能是在调用API函数之前,任务还未被创建。实际上并不是,因为我的FreeRTOS代码是靠STM32CubeMX生成,按理来说不会有这种问题。后面询问ChatGPT发现,可能是任务的堆栈大小太小了,STM32CubeMX默认生成的任务是128Words。我这个应该是任务比较特殊,一般可能128够用了。想了几天的函数或者参数有问题,但是又查不出来,没想到是这个问题。我随后尝试增加到512,编译运行,发现正常运行了。还得是ChatGPT。
2024-08-18 17:59:03
158
原创 ESP8266与阿里云物联网平台连接
最近折腾项目,需要用到ESP8266模块对接阿里云物联网平台,网上感觉十分完善的教程少了一点点,比较折腾我哈哈哈,所以打算自己写一篇。
2024-08-11 23:30:33
1085
原创 【面试】2025全志科技-实习-嵌入式软件开发工程师
12、假设,你在未来的工作里面被分配到了一个具有挑战性且没有明确指导的任务,你会怎么着手开展工作?前几天面试了全志科技的实习岗位,给大家分享一下面经,因为网上关于这个公司的面经太少了。之前在别人的面经里提到珠海主要做研发,深圳好像做技术支持,我选择了珠海研发。7、可以讲一下在学习中遇到挫折,但最终客服并取得良好成功的经历吗?11、看你加入了一个ACM竞赛队,出于什么原因想加入?6、在这一门课有弱势的情况下,有没有采取改进的措施?(广州、珠海、深圳、西安)4、有没有其他比较好的课程?10、转正后的期望薪资。
2024-07-17 18:15:13
143
原创 #08【面试问题整理】嵌入式软件工程师
(1)第一次握手客户端发送SYN包(seq=x,SYN=1)到服务器,并进入SYN_SENT状态,等待服务器确认。(2)第二次握手服务端收到客户端发来的SYN包后,给客户端回复SYN+ACK包(SYN=1,seq=y,ack=x+1),并进入SYN_RCVD的状态。(3)第三次握手客户端收到服务器响应报文后,发送ACK给服务器(seq=x+1,ack=y+1),此时客户端处于ESTABLISHED状态,服务器收到ACK报文后,也处于ESTABLISHED状态,至此,TCP连接成功。
2024-06-12 22:45:39
267
原创 #07【面试问题整理】嵌入式软件工程师
TCP通过发送数据后等待接收方的确认,以及在数据传输过程中采用应答机制,确保每个数据包都被正确接收。如果接收方没有确认收到某个数据包,发送方将重新发送该数据包,直到接收方确认收到为止。TCP给每个数据包分配一个独特的序列号,接收方可以根据序列号对数据包进行排序,确保数据包的顺序正确。如果发送方在一定时间内没有收到接收方的确认,将重新发送数据包,以确保数据包能够被正确传输。TCP通过流量控制机制,确保发送速度不会超过接收方处理速度,避免数据包丢失或传输错误。
2024-06-12 22:41:03
416
原创 #06【面试问题整理】嵌入式软件工程师
堆(heap):是由malloc之类函数分配的空间所在地。地址是由低向高增长的。栈(stack):是自动分配变量,以及函数调用的时候所用到的一些空间,地址是由高向低减少的。内存溢出(out of memory):内存不够内存泄漏(memory leak):是指程序中已动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统资源的浪费,导致程序运行速度缓慢甚至系统崩溃等严重后果。
2024-06-12 22:34:53
144
原创 #05【面试问题整理】嵌入式软件工程师
原子操作用来保证执行过程不被打断,是很多其他同步方法的基石。操作系统对原子操作的实现是基于汇编的,另外现在很多处理器也提供了原子操作的原语级支持。Linux操作系统实现了三种原子操作:32位整数原子操作、64位整数原子操作、位原子操作。原子整数操作:原子整数操作的操作对象是32位的整数,常用场景是实现计数器,操作系统提供了自增1和自减1的原子操作,用于支持计数器。64位整数原子操作:原子操作的目标是64位的数字。
2024-05-23 15:55:46
155
原创 #04【面试问题整理】嵌入式软件工程师
异步串口异步串口(Asynchronous Serial Port)是一种串行通信技术,它使用异步信号来传输数据,这意味着数据在传输过程中不会被同步。它使用一种叫做“异步”的信号,这意味着数据可以在任何时间开始传输,而不需要有一个同步信号来触发传输。优势异步串口的优势在于它可以在低带宽条件下传输数据,并且可以比较容易地实现。它不需要使用特殊的硬件,只需要一个标准的串行端口即可。此外,它可以使用简单的软件控制,因此可以比较容易地实现。劣势异步串口的劣势在于它的传输速度较慢,因此不适合传输大量数据。
2024-05-21 14:53:23
46
原创 #02【面试问题整理】嵌入式软件工程师
本系列博客主要记录有关嵌入式方面的面试重点知识,本系列已经更新的篇目有如下: 1.1进程线程的基本概念【本篇】1.2 并发,同步,异步,互斥,阻塞,非阻塞的理解线程同步:每个线程之间按预定的先后次序进行运行,协同、协助、互相配合。可以理解成“你说完,我再做”。有了线程同步,每个线程才不是自己做自己的事情,而是协同完成某件大事。线程互斥:当有若干个线程访问同一块资源时,规定同一时间只有一个线程可以得到访问权,其它线程需要等占用资源者释放该资源才可以申请访问。线程互斥可以看成是一种特殊的线程同步。
2024-05-16 16:17:32
148
原创 #01【面试问题整理】嵌入式软件工程师
进程:进程是对正在运行中的程序的一个抽象,是系统进行资源分配和调度的基本单位。线程:线程是操作系统能够进行运算调度的最小单位,其是进程中的一个执行任务(控制单元),负责当前进程中程序的执行。一个进程至少拥有一个线程,进程也可以拥有多个线程,这些线程共享同一块内存,线程之间可以共享对象、资源,如果有冲突或需要协同,还可以随时沟通以解决冲突或保持同步。对于单线程,可以理解为对于所有的任务必须依次交替运行完成,而对于多线程,可以理解为你是一家企业的老板,你吩咐与线程数量相同的工人去同时干各个线程的内容。
2024-05-11 16:48:04
287
原创 嵌入式面试题目111道
5.2.2 一个程序从开始运行到结束的完整过程(四个过程)⭐⭐⭐⭐⭐。5.2.5死锁的原因、条件 创建一个死锁,以及如何预防⭐⭐⭐⭐⭐。5.1.6 bootloader内核 根文件的关系⭐⭐⭐⭐。5.2.1大小端的区别以及各自的优点,哪种时候用⭐⭐⭐⭐⭐。5.2.7虚拟内存,虚拟地址与物理地址的转换⭐⭐⭐⭐。5.2.10中断怎么发生,中断处理大概流程⭐⭐⭐⭐。5.1.9为什么需要BootLoader⭐⭐⭐⭐。5.1.10 Linux内核同步方式总结⭐⭐⭐⭐。5.1.5内核态,用户态的区别⭐⭐⭐⭐⭐。
2024-05-09 17:19:34
571
原创 #01【面试问题整理】嵌入式软件工程师
本系列文章预计应该也许可能大概会持续更新一段时间。笔者将整理网络上各个面试题目,在此系列中。本期参考文章如下:【八股文】嵌入式软件工程师-2025校招必备-详细整理_嵌入式软件开发八股-CSDN博客。
2024-05-09 17:03:51
1185
原创 【蓝桥杯嵌入式学习G431】模块七:I2C-EEPROM
时序图:代码都是根据时序图来编写,具体原理略显复杂,本文章暂时只分享速通技巧,掌握模块化即可。原理可搜索其他人的教程。
2024-03-20 20:12:53
544
原创 【蓝桥杯嵌入式】KEY 按键模块(新一版,集合按键单双击、长按)
由于在蓝桥杯嵌入式组第十五届考纲中,明确提到要考按键的单击、双击、长按,为此,新一版的按键模块是融合了三个功能一起的,经过测试,代码无误。如有误,请指出。点个关注嘤嘤嘤。
2024-03-15 19:36:46
598
3
原创 蓝桥杯嵌入式第十三届省赛第二场——程序设计部分
LCD的显示界面跟着题目要求来即可,注意行数、空格数、保留几位小数点的要求。建议是:不管用不用的上,都可以为了保险,去官方提供的LCD文件中,将。
2024-01-27 16:42:06
1025
1
原创 【蓝桥杯嵌入式学习G431】模块六:ADC
根据原理图,配置引脚PB15或者PB12,具体配置哪个需要根据题目需求,看题目是对哪个电位器,如果是对R37电位器进行操作,则配置PB15,如果是对R38电位器进行操作,则配置PB12。这里以R37为例,也就是配置PB15:选中ADC2_IN15。新建文件:myadc.c和myadc.h,注意由于库本身自带adc.h所以不能取名为adc,随意换一个名字都可以。配置成功,点击GENERATE CODE。可以调用getADC函数来获取当前的值。
2023-12-21 18:02:45
487
原创 蓝桥杯嵌入式第十三届省赛第一场--程序设计部分
main函数主要为初始化。根据题目所需显示相应界面。在此题目中,由于STA界面是静态的,只会有一种结果,所以其实可以直接将页面写死,直接输出2000Hz和10%。如注释。如注释。
2023-12-21 16:31:46
516
原创 蓝桥杯嵌入式第十二届省赛--程序设计部分
这是LCD的屏幕界面显示,利用Clear函数进行清屏,使得切换界面的时候不会闪烁,或者一次按键实现多次切屏功能。main函数主要是进行初始化,然后在while循环中调用lcd、按键、led、uart的函数实时判断完成其功能。这是按键的处理函数,根据每个按键按下的标志,来对应实现相应的逻辑。判断数据的逻辑是否有误,无误返回0,否则返回错误的类型(其实是方便我debug)。1、有空余、PA7低电平 --- LED1 亮 LED2 灭。写完咯,有一说一,十二届简单,唯一难点就在串口的数据解析上。
2023-10-30 19:51:44
201
原创 【蓝桥杯嵌入式学习G431】模块五:USART
按照如图所示的顺序,根据题目要求配置好USART。注意:建议在配置了LCD之后再配置串口,不然引脚位置需要自己调整到PA9、PA10。然后可以在uart_rx()这个自定义函数中根据题目要求实现自己的业务逻辑。最后下载到板子上,打开串口调试助手,发送对应格式的数据,看看接受是否成功。配置成功,点击GENERATE CODE。
2023-10-30 18:14:09
319
原创 【蓝桥杯嵌入式学习G431】模块四:PWM
PWM脉冲信号输出,需要利用到定时器的作用,我们可以根据题目要求,来对相应的引脚进行配置。就拿第十二届蓝桥杯嵌入式省赛题目举例:题目要求PA7引脚进行脉冲输出,所以我们需要对PA7引脚进行配置。
2023-10-30 17:09:56
321
原创 【蓝桥杯嵌入式学习G431】模块三:KEY
打开软件,新建两个文件,命名为interrupt.c interrupt.h,保存至自己项目对应的文件夹中。例如,此处PSC=80-1,ARR=10000-1,F=80000000/(80*10000)=100Hz。打开软件,根据原理图,选中所需的引脚:PB0、PB1、PB2、PA0,选择GPIO Input。在main函数中添加头文件,利用extern关键字,将刚刚定义的keys,引到main.c中。F=主频/((PSC+1) * (ARR+1))T=10ms,定时器每隔10ms进入中断一次。
2023-10-26 20:53:47
254
原创 【蓝桥杯嵌入式学习G431】模块二:LCD
在以下两个文件夹中,分别将font.h lcd.c lcd.h文件复制粘贴进自己工程的bsp文件夹中。接下来需要在main函数之中,在BEGIN-END之间(不在while循环中),添加LCD的初始化。打开软件,根据原理图,选中所需要的引脚,然后选择GPIO Output 即可。的作用是将text里面的内容,显示到Line1行(第二行)中。在main.c中记得添加lcd.h。,每一列的距离可以通过空格控制。LCD屏幕一共10行,分别代表。加在LCD初始化的下面即可。
2023-10-26 19:24:06
856
原创 【蓝桥杯嵌入式学习G431】模块一:LED
该函数的参数是一个字节,0x00 = 0000 0000 ,每个位代表一个LED灯,从右往左分别代表LD1-LD8。首先编写完代码后,进行编译,编译出现 0 Error,点击 LOAD 进行下载到开发板(首先先保证自己电脑与开发板已经连接起来了)新建 两个文件,分别命名为:led.c led.h,并且保存在我们自己建的文件夹bsp中。0xFE = 1111 1110 ,只有LD1为0,其他全为1,所以只有LD1不亮。选中PC8-PC15这八个引脚,选择High,低电平使能,初始化全灭。打开软件,打开工程。
2023-10-24 18:04:45
279
原创 【蓝桥杯嵌入式学习G431】初期配置
本文所使用的是蓝桥杯嵌入式新的开发版—STM32G431RBT6。JAVA尽量安装最新版 64 位的JavaKeil 5安装包链接:链接:https://pan.baidu.com/s/1OgnYGpnTmTyaS9ytCq-JTg 提取码:qh5o由于蓝桥杯嵌入式省赛赛道,通常只是在几个模块里出考点,所以就将各个模块都进行整理。
2023-10-24 16:48:50
280
原创 [HTML、CSS、JavaScript学习]No.02标题样式 以新浪新闻页面为样例
我们可以利用选择器加CSS样式,改变时间、作者的标签,但是此时这俩东西都在一个hr标签中,我们需要将其分开来处理,又要保持原本的含义,可以用span标签来包裹我们需要改变样式的标签。将时间和作者分别用两个span标签包裹,分别对其进行id和类选择器的使用,然后采用CSS的内嵌样式,通过两个选择器对所对应的标签进行对应的修改操作,将其颜色改变。在使用ID选择器之前,需要对你想要改变样式的标签进行命名,也就是取个ID,可以通过属性赋值的方式,通过id属性进行ID赋值。在CSS中常用简单的有三种选择器,分别为。
2023-06-10 11:14:20
427
原创 [HTML、CSS、JavaScript学习]No.01 以新浪新闻页面为样例
HTML,即 Hypertext Markup Language,是一种用于创建网页的标记语言。它使用一系列标记来描述网页中的文本、图像、超链接等元素的结构和显示方式。HTML标记通常被称为标签,一般用尖括号括起来,比如 、、 等等。这些标记告诉浏览器如何显示页面的内容和布局。HTML是一种非常基础的技术,它被广泛用于网页开发和设计。随着HTML的发展和改进,现代的网页开发已经逐渐转向使用更先进的技术,如CSS和JavaScript,来控制页面的样式和交互。
2023-06-05 23:38:54
787
1
原创 【C++· 蓝桥杯】Huffman树
#include <stdio.h>#include <math.h>#include <string.h>#include <algorithm>#include <iostream>using namespace std;int main(){ int n, huff[1000] = {0},num,sum=0,price=0; int i, j; scanf("%d", &n); num = n; for.
2021-11-16 14:19:54
677
原创 【C语言】高精度加法
#include <stdio.h>#include <math.h>#include <string.h>int main(){ int a[200] = { 0 }, b[200] = { 0 }, c[200] = {0},i, t=0,j,p=0,tmp=0; int lena, lenb,max; char s[100] = { 0 }; scanf("%s", s); lena = strlen(s); for (j=0,i = le.
2021-11-11 14:24:41
774
原创 【C语言】大数阶乘算法
#include <stdio.h>#include <stdlib.h>#define MAX 4000int main() { int n,a[MAX]={0},i,j,s,r=0; scanf("%d",&n); a[0]=1; for(i=2;i<=n;i++) { for(j=0;j<MAX;j++) { s=a[j]*i+r; ...
2021-11-09 23:08:14
748
1
【微信小程序】线上点单小程序
2023-06-19
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人