自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(54)
  • 收藏
  • 关注

原创 linux开发环境常用指令

(6)复制目录到另一个目录:cp mx6ullevk/ -r mx6ull_alientek_emmc。tab键设置为4格;6、编译设备树指令:先进入到设备树文件目录,然后执行 make dtbs。3、cat /proc/devices //查看当前已经使用掉的设备号。4、lsmod //查看加载的驱动模块,看到的模块名跟驱动文件名一样。(5)命令行 rm -rf 文件夹名称:删除某个带文件的文件夹;(2) su 用户名,exit:切换到用户目录;1、modprobe drv.ko //加载驱动。

2024-03-04 11:41:56 961

原创 linux驱动开发环境搭建

EMMC分区建立好以后就可以从files中读取要烧写的uboot、 linux kernel、 .dtb(设备树)和rootfs这4个文件,然后将其烧写到EMMC中,这个就是 MfgTool的大概工作流程。(1) 将firmware目录中的uboot、 linux kernel和.dtb(设备树),然后通过USB OTG将这个文件下载到开发板的DDR中, 目的就是在DDR中启动Linux系统,为后面的烧写做准备。解决:重新编译 重新编译内核和模块驱动程序,然后重新启动并重新加载新的驱动;

2024-03-04 11:31:23 917

原创 FreeRTOS 其它知识点

②系统处于低功耗模式的时间至少大于configEXPECTED_IDLE_TIME_BEFORE_SLEEP个时钟节拍,宏configEXPECTED_IDLE_TIME_BEFORE_SLEEP默认在文件FreeRTOS.h中定 义为2,我们可以在FreeRTOSConfig.h中重新定义,此宏必须大于2!处理器工作在低功耗模式的时间太短没有意义,所以我们必须对工作在低功耗模式的时间做个限制,宏configEXPECTED_IDLE_TIME_BEFORE_SLEEP就是用来完成这个功能的。

2024-02-29 21:25:18 943

原创 FreeRTOS 内存管理

heap_2不会把释放的内存块合并成一个大块,这样有一个缺点,随着你不断的申请内存,内存堆就会被分为很多个大小不一的内存(块),也就是会导致内存碎片!,它提供了内存块合并算法。(2)heap_2提供了内存释放函数,用户代码也可以直接调用函数pvPortMalloc()和 vPortFree()来申请和释放内存,但是 heap_2 会导致内存碎片的产生!(4)heap_4相对与heap_2提供了内存合并功能,可以降低内存碎片的产生,我们移植FreeRTOS 的时候就选择了heap_4。

2024-02-29 21:20:36 1066

原创 FreeRTOS 事件标志组

事件或多个任务进行同步,此时信号量就无法满足。FreeRTOS为此提供了一个可选的解决方法,那就是事件标志组。当某个任务可能会需要与。

2024-02-29 21:16:05 234

原创 FreeRTOS 软件定时器

软件定时器允许设置一段时间,当设置的时间到达之后就执行定时器的回调函数。回调函数的两次执行间隔叫做定时器的定时周期。简而言之,当定时器的定时周期到了以后就会执行回调函数。

2024-02-29 21:13:29 828

原创 FreeRTOS 信号量

(1)当信号量被获取了,信号量值变为0;当信号量被释放了,信号量值变为1。把这种取值只有0与1两种状态的信号量称之为二值信号量。创建二值信号量时,系统会为创建的二值信号量分配内存。(2)二值信号量是一种长度为1,消息大小为0的特殊消息队列。因为这个队列只有空或满两种状态,而且消息大小为0,因此在运用时,只需要知道队列中是否有消息即可,而无需关注消息是什么。

2024-02-29 21:08:29 789

原创 FreeRTOS 队列

(1)队列的作用是在任务与任务、任务与中断之间。

2024-02-29 21:01:15 1176

原创 FreeRTOS时间管理

(1) 延时时间由参数xTicksToDelay来确定,为要延时的时间节拍数,延时时间肯定要大于 0;(5) 如果函数xTaskResumeAll()没有进行任务调度的话那么在这里就得进行任务调度。是指每次延时都是从任务执行函数vTaskDelay()开始,延时指定的时间结束;(3)调用函数prvAddCurrentTaskToDelayedList()(2) 调用函数vTaskSuspendAll()挂起任务调度器。(4) 调用函数xTaskResumeAll()恢复任务调度器。

2024-02-29 20:56:43 288

原创 FreeRTOS任务切换

将当前运行的任务的寄存器保存到栈中,再将就绪任务的数据从栈中保存到寄存器,然后运行。

2024-02-29 20:52:29 1459

原创 FreeRTOS 任务创建和调度器开启

答案是为了隔离OS和应用程序,程序的运行少不了堆栈,因为我们CPU只有少量的通用寄存器,当我们使用的临时变量比较多得时候,就需要将这些临时变量存储到堆栈里,而堆栈的push和pop都是通过SP来实现的,所以通过MSP和PSP就能实现OS内核与应用程序的隔离,应用程序task用PSP,而OS用MSP,这样会非常安全。现在来看(1)、(2)、(3)这三步起始就是为了获取MSP的初始值。(7)和(8)、数据同步和指令同步屏障,这两个指令的详细内容请参考《权威指南》的“第 5章 指令集”的 5.6.13 小节。

2024-02-29 20:41:12 985

原创 FreeRTOS基础知识

前后台系统的实时性差,前后台系统各个任务(应用程序)不管这个程序现在有多紧急,都只能排队等着轮流执行!相当于所有任务(应用程序)的优先级都是一样的;而且代码的扩展性差,不利于功能的添加和维护。但是前后台系统简单资源消耗也少!

2024-02-19 23:10:57 1076

原创 FreeRTOS移植到GD32

可使用的最大优先级数量,设置完成以后就可以设置任务优先级,但必须在0~(configMAX_PRIORITIES-1)区间内,其中0为最低优先级,configMAX_PRIORITIES-1为最高优先级。这个大小的单位不一定是1byte,比如说stm32是32位单片机,那么大小的单位就是4byte,当configMINIMAL_STACK_SIZE=100时,就相当于空闲任务堆栈大小为400byte。,根据自己使用的是多少位的单片机来做修改,stm32是32位MCU,所以选择32位。

2024-02-19 22:57:24 1529

原创 MCU看门狗

设置计数器值为 0x7F,窗口寄存器为 0x5F,分频数为 8,然后可由前面的公式得到窗口上限时间 Twwdg=4096×8×(0x7F-0x5F)/42MHz=24.98ms,窗口下限时间 Twwdg=4096×8×(0x7F-0x3F) /42MHz=49.97ms,即喂狗的窗口区间为 24.98~49.97ms。:上限值:W[6:0] 是 WWDG_CFR 寄存器的低 7 位,用于与递减计数器 T[6:0]比较的窗口值,也就是我们说的上限值,由用户设置。

2024-02-17 21:15:31 2344

原创 MCU中断控制

每次触发滴答定时器中断,系统节拍中断服务程序会调用函数xTaskIncrementTick()来判断,如果该函数返回值为真(不等于pdFALSE),说明处于就绪态任务的优先级比当前运行的任务优先级高,这会触发一次PendSV中断,进行上下文切换。(1) 它是内核的器件,M3/M4/M7 内核都是支持 256 个中断,其中编号为 1~255,而 0 表示没有异常,这里的编号单纯只是这些中断的一个序号,而不是优先级。(想了解的可以搜索:CM3的两种模式,两种权限,以及两个指针MSP与PSP,中断与异常)。

2024-02-17 21:06:50 1465

原创 MCU电源控制(PWR)与低功耗

比如芯片从1.6V~3.6V都可以工作,但是芯片在低电压时某些内部模块可能不能工作,或者1.6V的时候芯片频率只能工作在50MHz,而3.3V的时候可以工作在100MHz。进入停止模式,所有的时钟都关闭,所有的外设也就停止了工作。其本质也是一个电压检测过程,当芯片输入电压VCC>Vpor电压时,POR模拟模块将输出POR信号提供给全芯片使用,这是一个从复位到复位释放的过程。目的模拟检测可以通过中断的方式告诉软件,我这里电压和你设置要求不符合了,你可以软件采取动作了,它不再是单纯电压低了就复位。

2024-02-17 20:59:55 1561

原创 RTC时钟

当亚秒、秒、分、小时、日期分别与闹钟寄存器 RTC_ALRMASSR/RTC_ALRMAR 和 RTC_ALRMBSSR/RTC_ALRMBR 中的值匹配时,则可以产生闹钟(需要适当配置)。实时时钟一般表示为:时/分/秒/亚秒。常用,例如,RTC程序中,我们向DR1写入0x5050,开机读出寄存器值看是否有改变,检测是否已经配置过RTC,如果不是写入的值,说明电池有掉过电,需要重新设定时间和日期。(3) 读出bkr(0)寄存器的值,判断是否被修改过,如果修改过,说明电池有重新上电,要重新设置时间和日期。

2024-02-17 20:51:22 1198

原创 DMA--直接存储器访问

双缓冲模式下,两个存储器地址指针都有效,即DMA_SxM1AR寄存器将被激活使用。比如SPI3_RX请求,占用DMA1的数据流0的通道0,因此使用该请求时,需要在把DMA_S0CR寄存器的CHSEL[2:0]设置为“000”, 此时相同数据流的其他通道不被选择,处于不可用状态,比如此时不能使用数据流0的通道1即I2C1_RX请求。:在外设到存储器的直接模式下,因为存储器总线没得到授权,使得先前数据没有完成被传输到存储器空间上,此时DMEIF标志位被置1,如果使能DMEIE中断控制位将产生直接模式错误中断。

2024-02-17 20:44:12 1069

原创 Flash存储

只有在完成编程操作后,才能正确处理读操作。(7)在执行闪存写操作时,任何对闪存的读操作都会锁住总线,在写操作完成后读操作才能正确地进行。(8)STM32F4 的 FLASH 在编程的时候,也必须要求其写入地址的 FLASH 是被擦除了的(也就是其值必须是 0xFFFFFFFF),否则无法写入。(3) Flash存储器通常被分为块、扇区、页,一般可以按块、扇区、页擦除,但每个芯片的flash都会不一样,要具体说明;(1) flash的总大小,代码占用的大小,每一个扇区对应的每一页的大小;

2024-02-17 20:17:50 265

原创 定时器(基本定时器、通用定时器、高级定时器)

一般先要设置输入捕获的边沿检测极性,如:我们设置上升沿检测,那么当检测到上升沿时,定时器会把计数器 CNT的值锁存到相应的捕获/比较寄存器 TIMx_CCRy 里, y=1~4。在这个循环中,改变 CCRx 的值,就可以改变 PWM 的占空比,改变 ARR 的值,就可以改变 PWM 的频率,这就是 PWM 输出的原理。重复计数器的定时器,定时器每次发生上溢或下溢时,重复计数器的值会减一,当重复计数器的值为 0 时,再发生一次上溢或者下溢才会生成定时器更新事件。重复计数器寄存器是具有影子寄存器的。

2024-02-17 20:12:52 3255

原创 ADC--模拟量转换成数字量

(1) ADC 的输入通道, ADC1 有 16 个外部通道和 3 个内部通道,而 ADC2和 ADC3 只有有 16 个外部通道。ADC 转换完成后的数据输出寄存器。(1)规则组:16个规则通道共用一个ADC_DR 寄存器保存转换结果,所以多通道转换要用扫描模式,并且要开DMA保存转换结果。(3)规则和注入组转换结束时还可以产生 DMA 请求,把转换好的数据存储在内存里面,防止读取不及时数据被覆盖。:通过写 ADC_CR2 寄存器的 ADON 这个位来控制,写 1 就开始转换,写 0 就停止转换,

2024-02-17 19:57:26 1959

原创 SPI--串行外设接口

SPI--串行外设接口

2024-02-17 19:41:17 237

原创 IIC--集成电路总线

IIC--集成电路总线

2024-02-16 20:06:22 1491 1

原创 USART--串口通信

USART--串口通信

2024-02-16 19:39:04 1141

原创 GPIO八种工作模式

GPIO八种工作模式

2024-02-15 16:05:24 3774

原创 GD32F303VET6裸板调试遇到问题

GD32F303VET6裸板调试遇到问题

2024-02-15 15:46:16 570

原创 linux内核配置和编译过程

linux内核配置和编译过程

2023-12-18 15:46:52 351

原创 uboot图形化配置及其原理

uboot图形化配置及其原理

2023-12-01 15:52:28 78

原创 uboot 的配置和编译过程

uboot 的配置和编译过程

2023-11-30 17:36:50 1121

原创 GD32F303 步进电机驱动

步进电机驱动

2023-11-28 17:26:27 401

原创 GD32F303 飞梭编码器

飞梭编码器

2023-11-28 11:39:00 313

原创 C语言循环读写Flash

循环读写Flash

2023-11-27 16:49:42 351

原创 GD32F303 按键常用操作

按键常用操作

2023-11-24 16:25:27 181

原创 ubuntu与windows共享文件的方法

ubuntu与windows共享文件的方法

2023-08-30 19:23:39 1242

原创 uboot常用命令

uboot常用命令

2023-07-06 20:28:34 1230 1

原创 C语言字符串常用

【代码】C语言字符串常用。

2023-07-06 11:06:20 111 1

原创 Flash读写结构体类型数据常用操作

Flash读写结构体类型数据

2023-07-06 10:47:07 835 1

原创 在uboot中添加自己的开发板(imx6ull)

在uboot中添加自己的开发板(imx6ull)

2023-07-06 09:44:11 285 1

原创 uboot启动运行第一行代码到命令行

uboot启动运行第一行代码到命令行

2023-06-19 16:31:07 224

原创 bootz 命令启动内核过程

bootz 命令启动内核过程

2023-06-13 17:14:06 77

空空如也

空空如也

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

TA关注的人

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