自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

南山府的博客

关注公众号获取更多资源。微信永久更新,CSDN半永久更新

  • 博客(89)
  • 资源 (1)
  • 收藏
  • 关注

原创 LVGL项目实战之桌面报警图标显示

安装过程不在说明,应该没有难度,这里不在介绍。首先打开软件,界面如下所示:点击创建新项目,然后选择LVGL版本,当前GUI-Guider支持7.10和8.3两种版本,具体使用哪一个自行选择,本项目使用的是8.3版本。

2024-07-23 13:30:47 739

原创 LVGL项目实战之桌面UI绘制

在开始代码之前,我们先来看一下我们这个项目的界面。根据第二章的介绍,我们已经知道需要哪些东西了。首先我们先来看桌面的UI:上面就是我们项目的桌面设计,顶部两栏分别显示的是遥控/门磁和WIFI状态显示部分。往下来是一行分割横线,紧接着显示的是时间、年月日、星期,在之后是分割横线,最底部是我们报警状态的图标显示,时间和日期是需要联网才能进行动态的切换。这就是我们桌面的整体部分。接下来我们就来设计。

2024-07-22 23:59:48 1386

原创 LVGL项目实战之UI规划

我们在在做项目之前,先需要确定项目的需求以及可能实现的功能,我们只有确定这些才能够对整体的框架进行把握。本小结就说一下我们这个项目的一个整体的框架结构以及功能。

2024-07-21 21:48:22 974

原创 没有硬件基础基础可以学习单片机吗?一文带你了解详情!!!

再说了,看了那玩意,和实际的电路设计多少还是有区别的,实际基本上都是用芯片集成了。所以呢为了大家能够有更好的学习,我也出了一个这样的视频,下面是一些学员的反馈。这个话题是在知乎上看到的,这也是个老话题了,基本上所有的初学者都会问这个问题,我就在这个文章来说一下。我说是的,他说那你学这干啥,你只需要看懂基本的引脚连接就行、直到高低电平就行了。所以没有硬件基础也是可以学习的,因为在你学习的时候,基本上所有的资料都会告诉你怎么去看原理图的。我做了这么多年单片机的开发,对这个还是比较有发言权的。

2024-03-17 23:30:41 497

原创 如何快速的学习单片机,学习单片机的路线是怎样的??末尾附赠教程+项目资料包

经过上面的学习,一般情况下4-7个月就差不多了。我这里也有一些项目资料分享给大家,大家可以加我微信索要。我会多搜集一些资料分享给大家。下面是这些资料项目的部分目录。需要的找我来取。

2024-03-17 04:50:08 1573

原创 C语言算法--桶排序

什么是桶排序法?其实说白了就是把需要排列的元素分到不同的桶中,然后我们对这些桶里的元素进行排序的一种方式,然后我们在根据桶的顺序进行元素的合并。(不过前提是要确定桶的数量以及大小)按照稍微正式的说法是:桶排序法是一种基于计数的排序算法。它的基本思想是将要排序的数据分到几个有序的桶里,每个桶里的数据再单独进行排序。桶内排完序之后,再把每个桶里的数据按照顺序依次取出,组成的序列就是排好序的序列。具体实现时,首先确定桶的个数和每个桶所能容纳数据的范围,然后遍历待排序数据,将每个数据放入对应的桶中。

2023-05-18 23:26:19 1151

原创 C语言算法--快速排序法

Lomuto分区是一种用于快速排序算法的分区方法,由C.A.R. Hoare的经典分区方法之一。Lomuto分区算法的实现相对简单,但在某些情况下效率稍低。选择一个基准元素。通常情况下,选择数组的最后一个元素作为基准元素。遍历数组,将小于等于基准元素的元素放在数组的左边,并维护一个指针(称为分区指针),指向当前小于等于基准元素的位置。遍历结束后,将基准元素放在分区指针的下一个位置,即将基准元素放在正确的位置上。分区指针左边的元素都小于等于基准元素,右边的元素都大于基准元素。

2023-05-18 16:07:00 5794 2

原创 C语言算法--冒泡排序

冒泡排序是一种简单的排序算法,它通过比较相邻元素的大小,并根据需要交换它们的位置来排序数据。它的名称来自于越小的元素会慢慢“冒泡”到数组的开头。冒泡排序的基本思想是从数组的第一个元素开始,依次比较相邻的两个元素的大小,并根据需要进行交换,使较大的元素逐渐向数组的末尾移动。在一次遍历中,最大的元素会被交换到数组的最后一个位置。然后,再进行下一次遍历,但这次只需比较到倒数第二个元素,依次类推。每次遍历都会将当前未排序的最大元素放置到正确的位置。

2023-05-18 15:59:22 2361

原创 QT教程demo之串口助手代码设计实现

关注WeChat Official Account 南山府嵌入式获取更多精彩我创建了一个群关注V号后加入。因为这里不允许添加二维码。

2023-05-04 17:39:26 1219

原创 QT教程demo之串口助手界面设计

从本章节开始我会间接性的写一写有关QT的项目,总体分为两大部分也就是两个专题,第一个专题是一些小demo之类的,第二个专题是一些项目工程这样子。当然了除了本人写的外。如果我要是看到比较好的QT工程。我也会给大家做一个文章的讲解。当然有关基础的教程,向小部件用法呀排版呀之类的,不在学习的范围内。不会的或不懂QT的请进行一定的了解再来。还有就是基础的东西网上比较多。这点就不写了。所有的都开源,我会把这些放到git仓中,需要的可以下载。

2023-05-04 16:20:14 519 1

原创 嵌入式C语言策略模式简单说明

策略模式是一种对象行为型模式,它定义了一系列的算法,并将每一个算法封装起来,使它们可以互相替换。策略模式让算法的变化独立于使用算法的客户端,从而实现了算法的动态切换。在嵌入式系统中,策略模式的主要目的是将不同的行为或动作封装在不同的算法对象中,并使得这些算法对象可以在运行时根据需要动态切换。这种设计模式可以让嵌入式系统更加灵活,易于维护和扩展。

2023-04-23 22:23:31 567

原创 STM32实战之LED循环点亮

接着上一章讲。本章我们来讲一讲LED流水灯,循环点亮LED。在LED章节有的可能没有讲到,本章会对其进行说明,尽量每个函数说一下作用。也会在最后说一下STM32的寄存器,在编程中寄存器是避免不了的东西,寄存器也是非常好理解的,就是羊肉串串成一串而已。其实对于嵌入式来说,大多数开发者都是根据官方提供的例程写的。很少只有手册让个人写的。只有做芯片底层开发的会根据,芯片的逻辑进行代码的编写。但是对于很多开发者来说,都是基于官方提供的芯片demo进行相关的底层配置与开发。

2023-03-02 22:28:15 3656 1

原创 STM32 实战之点亮LED

从本章节开始我们进行一个STM32实战操作,为此我还特意画了个简单的板子。是物联网相关的,后面会设计一个BMS的板子来写一下。

2023-03-02 17:38:16 2635

原创 keil MDK 支持包快速下载

MDK packhttp://www.abov.co.kr/data/mds/PACK/ABOV.CM0_DFP.1.0.0.packhttp://www.abov.co.kr/data/mds/PACK/ABOV.CM0_DFP.1.0.0.packhttp://www.abov.co.kr/data/mds/PACK/ABOV.CM3_DFP.1.2.1.packhttp://www.abov.co.kr/data/mds/PACK/ABOV.CM3_DFP.1.2.1.packhttp://s

2023-03-02 10:59:11 1153

原创 芯驰(E3-gateway)开发板环境搭建以及调试遇到问题的解决

可以在Windows上使用命令行或者IAR IDE编译SSDK项目。Windows编译依赖的工具已经包含在prebuilts/windows 目录中,包括编译器、Python和命令行工具。

2023-02-27 14:48:22 4419 2

原创 26-RTOS事件组和事件标志位 API 函数

事件组和事件标志位 API 函数。

2023-02-01 11:02:15 819

原创 25-RTOS FreeRTOS 软件定时器 API 函数

timers.h创建一个新的软件定时器实例, 并返回一个可以引用定时器的句柄。要使此 RTOS API 函数可用:configUSE_TIMERS 和 configSUPPORT_DYNAMIC_ALLOCATION 必须在 FreeRTOSConfig.h 中同时设置为 1(configSUPPORT_DYNAMIC_ALLOCATION 也可以不定义,此时其默认值为 1)。每个软件定时器都需要少量 RAM 来保存定时器的状态。

2023-01-31 14:45:28 952

原创 24-RTOS 信号量_互斥锁 API 函数

semphr. h创建一个,并返回一个可以引用该信号量的 句柄。必须在 FreeRTOSConfig.h 中被设置为 1,或保留未定义状态(此时,它默认 (此时默认为1),才能使用RTOSAPI函数。每个二进制信号量需要少量RAM,用于保持 信号量的状态。如果使用 xSemaphoreCreateBinary() 创建二进制信号量 则会从RAM。如果使用创建二进制信号量, 那么RAM由应用程序编写者提供,这需要用到一个附加参数, 但允许在编译时静态分配 RAM。

2023-01-31 13:57:49 769

原创 23-RTOS 消息缓冲区 API 函数

使用动态分配的内存新建。消息缓冲区会在每次发送和接收操作完成后执行回调。使用 xMessageBufferCreate() API 创建的消息缓冲区共享相同的发送和接收完成回调函数,这些回调函数通过 sbSEND_COMPLETED() 和 sbRECEIVE_COMPLETED() 宏定义。使用 xMessageBufferCreateWithCallback() API 创建的消息缓冲区 可以有自己唯一的发送和接收完成回调函数。请参阅获取使用静态分配内存(在编译时分配的内存)的相应版本。

2023-01-30 10:09:19 516

原创 22-RTOS 流缓冲区 API 函数

创建一个使用动态分配内存的新。流缓冲区 在完成每个发送和接收操作时执行回调。使用 xStreamBufferCreate()API 创建的流缓冲区 共享相同的发送和接收完成回调函数,这些函数是用 sbSEND_COMPLETED() 和 sbRECEIVE_COMPLETED() 宏定义的。使用 xStreamBufferCreateWithCallback() API 创建的流缓冲区可以有各自独特的发送和接收完成 回调函数。

2023-01-13 10:37:49 847 1

原创 21-FreeRTOS队列集API函数

队列集提供了一种机制,允许 RTOS 任务从多个 RTOS 队列或信号量同时进行读取操作后阻塞(挂起)。请注意, 除了使用队列集之外,还有更简单的替代方法。有关详细信息,请参阅 阻塞多个对象页面。必须使用调用 xQueueCreateSet() 显式创建队列集, 然后才能使用它。创建后,可以将标准 FreeRTOS 队列和信号量添加到集合中 (通过调用 xQueueAddToSet())。

2023-01-11 10:43:08 854

原创 20-FreeRTOS队列API函数

创建一个新队列并返回 可引用此队列的句柄。configSUPPORT_DYNAMIC_ALLOCATION 必须在 FreeRTOSConfig.h 中被设置为 1,或保留未定义状态(此时,它默认 为 1) ,才能使用此 RTOS API 函数。每个队列需要 RAM 用于保存队列状态和 包含在队列(队列存储区域)中的项目。如果使用 xQueueCreate() 创建队列,则所需的 RAM 将自动 从 FreeRTOS 堆中分配。

2023-01-10 14:50:54 1202

原创 19-FreeRTOS 任务通知API

每个任务都有一组“任务通知” (或仅“通知” ) ,每个 通知都包含状态和一个 32 位值。直达任务通知是直接发送至任务的事件, 可以取消接收任务的阻塞状态,还 可以选择通过多种方式更新接收任务的某个通知值。例如,通知可覆盖接收任务的通知值中的一个,或仅设置 更多位。当任务通知 用作轻量级且更快的二进制或计数信号量 替代方案时,可以使用宏 xTaskNotifyGive ()。

2023-01-09 15:20:15 875

原创 18-FreeRTOS内核控制

1-taskYIELD请求上下文切换到其他任务task. htaskYIELD() 用于请求切换上下文到另一个任务。 但是, 除非存在其他任务,其优先级等于或高于调用 taskYIELD() 的任务的优先级, 否则 RTOS 调度器将选择 调用了 taskYIELD() 的任务并使其再次运行。如果 configUSE_PREEMPTION 设置 为 1,则 RTOS 调度器将始终运行 能够运行的优先级最高的任务,因此调用 taskYIELD() 将永远无法 切换到一个优先级更高的任务。2-t

2023-01-09 01:07:37 1137

原创 安信可VC系列语音识别的使用教程

VC系列模组是我司开发的一款AI离线语音识别的产品,主芯片是云知声推出的离线语音识别芯片锋鸟M(US516P6),具有高可靠性,通用性强的特点。在语音识别技术上实现了高可靠的唤醒识别率、更远距离的唤醒、更低误唤醒率、更强的抗噪音能力、更快的响应识别时间,免联网的纯离线识别。VC系列模组采用了32bit RISC 架构内核,并加入了专门针对信号处理和语音识别所需要的 DSP 指令集,支持浮点运算的 FPU 运算单元,以及 FFT 加速器。

2023-01-08 14:34:12 2850 2

原创 17-FreeRTOS任务应用函数(3)

从任务的名称中查找任务的句柄。注意: 此函数需要较长的时间才能完成,并且只能 为每个任务调用一次。一旦获得了一个任务的句柄, 它就可以被储存在本地以便重新使用。必须在 FreeRTOSConfig.h 中将 INCLUDE_xTaskGetHandle 设置为 1,xTaskGetHandle() 才可用。

2023-01-03 14:16:08 2830

原创 同步、异步、单工、双工、半双工有啥不同

串行通信通常情况下分为同步和异步通信,同步通信需要同步时钟信号,而异步通信则是不需要同步时钟信号的。同步通信:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。异步通信:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式。像IIC 、SPI这类是同步通信(凡是带有时钟信号的基本上都是同步通信),像UART、CAN等是异步通信。

2023-01-03 13:45:30 2592

原创 ESP8266 WIFI模块的使用

ESP8266 wiFI 可以用作连接周边的无线设备,也可以作为发送器供其他设备连接通常在产品中,我们经常用作无线的接收使用,也可能会用作在线升级使用等。说点题外话:虽然在线升级已经较为成熟,但我不推荐在一些重要的产品中推荐这种在线OTA升级,像汽车、智能家居等这种代码直接由软件架构生成的底层逻辑代码类型。因为如果,底层结构或者一些代码逻辑被破解之后,很容易造成安全隐患,这种事情发生过不少,而且这种人,是最难被抓捕的。除非哪天,所有的系统网络是被破解或者很难针对的算法出现以及普及。我认为才是安全的。

2022-12-27 21:57:22 7036

原创 16-FreeRTOS任务应用函数(2)

xTaskGetApplicationTaskTagFromISR是在中断服务中调用的另一个版本。:正在查询任务的句柄。任务可以使用NULL作为参数值查询自己的标记值。

2022-12-26 15:32:39 766

原创 15-FreeRTOS任务应用函数(1)

该函数向TaskStatus_t结构体填充相关信息,系统中每一个任务的信息都可以填充到TaskStatus_t结构体数组中,数组大小由uxArraySize指定。注意,这个函数仅用来调试用,调用此函数会挂起所有任务,直到函数最后才恢复挂起的任务,因此任务可能被挂起很长时间。在文件FreeRTOSConfig.h中,宏configUSE_TRACE_FACILITY必须设置为1,此函数才有效。

2022-12-20 18:06:19 764

原创 14-FreeRTOS任务控制

调用vTaskDelay()函数后,任务会进入阻塞状态,持续时间由vTaskDelay()函数的参数xTicksToDelay指定,单位是系统节拍时钟周期。常量portTICK_RATE_MS 用来辅助计算真实时间,此值是系统节拍时钟中断的周期,单位是毫秒。在文件FreeRTOSConfig.h中,宏INCLUDE_vTaskDelay 必须设置成1,此函数才能有效。vTaskDelay()指定的延时时间是从调用vTaskDelay()后开始计算的相对时间。

2022-12-19 14:55:51 2113

原创 13-FreeRTOS任务创建与删除

任务创建和删除API函数位于文件task.c中,需要包含task.h头文件。task.h里面包函数任务的类型函数。例如,对xTaskCreate的调用(通过指针方式)返回一个TaskHandle_t 变量,然后可将该变量用vTaskDelete来进行任务的删除工作。

2022-12-17 18:22:37 1061

原创 12-FreeRTOS内存管理

RTOS内核在每次创建任务、队列、互斥量、软件定时器、信号量或事件组时都需要RAM。RAM可以在RTOS API对象创建函数中从RTOS堆中自动动态分配,也可以由应用程序编写人员提供。FreeRTOS提供了五种内存分配方案,用户可以根据自己的实际情况选择需要的方案。本篇将对这五种进行介绍。

2022-12-16 16:25:31 1799

原创 LVGL GUI GUIder使用教程

打开软件,创建一个新的工程,如下图所示:点击创建项目后会弹出LVGL版本选择。NXP开发的gui guider中目前有两种LVGL版本,一个是V7.10.1,一个是V8.2.0,这两个版本。本文以V8.2.0为例。如下图:选择Simulator,然后点击下一步。因为我们是新建一个,所以选择emptyUI就好。然后点击下一步.如下图:创建成功后,打开就是这个样子:如下图:我们先拖拽一个button控件,放置到画布上。如下图:我们拖拽完成后点击绿色按钮进行运行,绿色按钮按下会同时生成代码文件。有两种

2022-12-16 16:24:38 5434 5

原创 0- LVGL移植基于野火STM32F429挑战者(LVGL8.2)

LVGL8.2野火STM32F429_v2开发板因为ST在STM32F4之后所有的芯片都不在有标准库,因此本篇是基于HAL库的。同时现在有许多厂商都不在有标准库了,都是根据自己的开发环境进行一些基本芯片接口的配置。像NXP,ST等。这里不过多介绍LVGL,既然看到这个文章,大多数是奔着移植过来的。

2022-12-14 22:53:42 2254 7

原创 11-FreeRTOS配置函数 FreeRTOSConfig.h

这个表示是否启用调度函数,1表示使用抢占式RTOS调度程序,0是表示使用协程RTOS调度程序。

2022-12-14 17:07:27 1653 2

原创 10-FreeRTOS堆栈溢出

如果使用xTaskCreate()创建任务,那么作为任务堆栈的内存将自动从FreeRTOS堆中分配,并通过传递给xTaskCreate() API函数的参数进行内存划分。如果使用xTaskCreateStatic()创建任务,那么应用程序编写人需要预先分配用作任务堆栈的内存。堆栈的溢出是导致程序稳定性不良的一个常见的原因。因此,FreeRTOS提供了两种配置方式,能够帮助检测堆栈溢出的问题。在配置函数中需要把configCHECK_FOR_STACK_OVERFLOW进行设置。需要注意的是,这些需要在

2022-12-07 19:52:30 1743

原创 9-FreeRTOS之静态内存分配与动态内存分配

从9.0版本之后,FreeRTOS允许用户自己定义内存的大小,允许在以下对象创建而不用创建内存的分配:任务静态内存分配的创建静态内存分配的好处是,可以更好的对应用程序的内存的利用,具有更好的控制代码的编写:以上这些函数后面都会讲解。下面是官方提供的有关上面这些函数的静态应用,自己可以看一下,我看了一下,基本上没有理解难度:

2022-12-06 21:42:02 1615 1

原创 8-事件组或标志

事件位用于指示事件是否发生。事件位通常称为事件标志。例如,一个应用程序可以:事件组是一组事件位。事件组是由单个事件位组成的。例如:事件组由EventGroupHandle_t类型的变量定义。如果configUSE_16_BIT_TICKS设置为1,则事件组中存储的位(或标志)为8,如果configUSE_16_BIT_TICKS设置为0,则存储的比特位(或标志)数目为24。对configUSE_16_BIT_TICKS的依赖源于进程内部实现中用于线程本地存储的数据类型。事件组中的所有事件位都存储在一个无

2022-12-05 20:33:54 499 1

原创 7-FreeRTOS软件定时器

软件定时器就是允许函数设置一定的等待时间,然后执行。定时器执行的函数被称为定时器的回调函数。定时器从启动到执行回调函数之间的时间称为定时器的周期。定时器的回调函数在定时器的时间到达时执行。软件定时器要先创建才能使用。软件定时器功能的实现是非常容易的,但是想要有效的实现可能会优点困难,FreeRTOS的定时器,不会从中断中执行定时器的回调函数,除非定时器到达了,否则不会消耗任何的运算时间,不会像时钟中添加任何的运算负担,如果中断禁用了,也不会遍历任何的链表结构。定时器服务任务主要利用了FreeRTOS的一

2022-12-04 14:22:18 680

嵌入式路线图,嵌入式能够干啥,具体的路线框图

嵌入式路线图,嵌入式能够干啥,具体的路线框图嵌入式路线图,嵌入式能够干啥,具体的路线框图 指针知识点相对较多,是重点

2022-11-08

嵌入式工具TSMaster can

嵌入式工具TSMaster can

2022-04-01

空空如也

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

TA关注的人

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