自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 GT2933触摸驱动分析 - 初始化

gtx8_i2c驱动的最后会想platform总线添加一个设备,设备的名称为goodix_ts,则会在platform总线上查找有无匹配的驱动,在主函数的一开始就向platform总线注册了goodix_ts_driver驱动,名称为goodix_ts,因此两者会通过名字进行匹配成功,便执行驱动中的probe函数。至此第一阶段完成,具体执行goodix_later_init_thread进行第二阶段的初始化。至此gtx8_i2c驱动的任务完成,接下来交给platform总线。

2025-12-26 12:05:13 628

原创 Cortex-M3 05-其他内容

本文介绍了CM3处理器内核的关键技术特性。首先阐述了三级流水线架构,包括取指、译码和执行三个阶段,以及Prefetch Unit和Store Buffer的设计原理。其次说明内存格式支持大小端配置。重点分析了中断处理机制,详细描述了普通中断、咬尾中断和晚到中断的时序流程,以及中断进入和退出的操作步骤。此外还介绍了时钟系统、三种复位模式及启动序列,最后概述了三种睡眠模式及WIC唤醒机制。全文通过时序图和流程图直观展示了处理器核心功能模块的工作原理。

2025-12-26 11:08:04 440

原创 Cortex-M3 04-中断模型(续)

现在来思考下最后一个问题,中断是如何满足实时性要求的?首先第一点就是中断是根据优先级进行嵌套的,高优先级的中断可以抢占低优先级的中断,其次在中断的触发和切换过程中支持一些特殊机制,例如晚到中断和咬尾中断等,最后在ARMv7-M指令集架构中,中断的入栈和出栈是自动完成的。上述的一系列特性为Cortex-M内核的处理器在中断方面提供了实时性。

2025-12-14 00:31:52 693

原创 Cortex-M3 03-中断模型

Nested Vectored Interrupt Controller,NVIC嵌套向量中断控制器是CM3内部用于中断处理的一个模块,支持嵌套中断、向量中断、动态优先级调整、中断屏蔽等功能。现在来从新思考下前面提出的几个问题。对于中断是如果产生的,其实很清楚了,中断的产生分为两个部分,第一个部分程序系统异常,第二部分称为外部中断,系统异常是CM3内核下一定会包含的,而外部中断通常是MCU的外设产生的。第二个问题,CM3有多少个中断,对于系统异常一共有11个,对于外部中断在ARMv7-M架构下最多支持。

2025-11-29 18:30:12 623

原创 Cortex-M3 02-地址映射

Cortex-M内核是采用ARMv7-M指令集设计的处理器核,在ARMv7-M指令集中设定了处理器核大致的内存分布,芯片厂商仅需根据这个大致分布去添加外部的存储或外设器件即可。因此使用Cortex-M内核的微处理器存储映射大致相同。在地址映射中,由一个特殊的区域,称为Bit-bangding,通过该机制,可以更方便的访问外设和RAM区。地址映射还有一个区域,称为系统控制空间,里面包含了用于中断、嘀嗒定时器和调试等相关的寄存器设置,我在此称为内核相关寄存器。

2025-11-15 22:53:27 862

原创 Cortex-M3 01-功能描述和编程模型

通过这篇笔记,大概了解了Cortex-M内核的组成部分和一些指令集,以及Cortex-M内核下的一些运行模式等等。对该处理器核有了宏观上的认识。

2025-11-08 01:34:40 656

原创 04-优先级与延时链表

摘要 本文介绍了RTOS中任务优先级和延时链表的实现机制。在优先级方面,任务创建时需指定优先级数值,对应就绪链表数组的下标;任务切换通过查找最高优先级任务完成,使用clz指令高效定位。延时功能通过阻塞延时实现,在嘀嗒定时器中断中更新延时状态。延时链表部分,创建了两个延时链表用于管理阻塞任务,当任务调用vTaskDelay时从就绪链表移除并加入延时链表,计算唤醒时间作为排序值。这种设计提高了CPU利用率,确保任务精确唤醒,并支持大量任务管理。系统通过维护就绪链表和延时链表,实现了高效的任务调度机制。

2025-10-19 23:30:16 789

原创 固件下printf函数分析

回到一开始的问题。串口的输出信息是如果过来的?串口的信息是通过操作数据写入串口控制器的DATA寄存器来完成的,具体过程参见第二部分。显示器的信息是如何输出的?显示字符通过写入到缓冲区来完成显示的,源数据是vide_fontdata数组,本质是将前景色的什么位写入到缓冲区,继而实现字符的显示,具体请看第三部分。显示器的信息和串口信息是如何同步的?通过设置output_to_both这个变量控制。到这里分析基本结束,总结一下就是首先是对数据流相关的初始化做了分析,这是基础部分,初始化是在构造函数中完成。

2025-10-15 17:12:01 962

原创 03-临界段保护和阻塞延时

这篇文章主要分析了临界段的保护和空闲任务的创建以及阻塞延时的实现。对于临界段的保护,依据关闭中断来实现,而中断的关闭则是操作BASEPR寄存器实现,写入对应的掩码值,如果中断的优先级高于该掩码值,则对应的中断会被屏蔽。空闲任务创建之后,会挂载到优先级为0的链表中,任务1挂载到优先级为1的链表中,任务2挂载到优先级为2的链表中。阻塞延时的实现依据嘀嗒定时器和调度算法实现,当任务中调用阻塞延时函数时,会让出CPU的使用权,此时依据调度算法,切换至空闲任务。当任务的阻塞时间达到时,再次切换至任务中执行。

2025-09-27 21:51:17 722

原创 02-任务切换分析(续)

到这里为止,基本上搞清除了任务的创建和切换,上一篇算是宏观的分析,这一篇深入到了汇编代码的每一行,通过仿真的形式搞清楚程序的执行过程。其他CPU或者操作系统都是类似的,通过中断的形式进行任务的切换。在这里操作系统利用了处理器的线程模式和中断模式两种,同时使用了MSP和PSP进行堆栈的区分。主堆栈用MSP指示,地址在全局起始位置,任务栈用PSP指示。

2025-09-14 20:52:38 821

原创 01-任务切换分析

任务是独立且无法返回的函数。/* 任务主体,无限循环且不能返回 */for(;;任务控制块:TCB数据结构/* 栈顶 *//* 任务节点 *//* 任务栈起始地址 *//* 任务名称,字符串形式 */} tskTCB;任务控制块相当于任务的身份证,包括任务所需的一些信息,例如栈的信息,任务的名字。任务节点的作用是为了将任务挂置于一些特定的链表中。在freeRTOS中,任务的切换其实就是任务栈的切换。在任务栈中定义了任务的一些要素,任务栈一旦切换,那么这些相对应的要素也会随之改变。

2025-09-03 20:53:14 766

原创 01-操作系统引导

这篇文章主要是分析linux0.11代码中的bootsect和setup源文件,在代码中涉及到了BIOS中断、A20地址线、8086保护模式等内容。通过模拟器模拟了代码的执行过程,对这两个文件有个更加深入的理解。

2025-08-08 21:44:08 596

原创 linux子系统-Platform总线

简要记录了对于平台总线的学习过程。

2025-02-28 17:02:59 614

原创 PMON编译过程分析(五)- make tgt编译分析

整个过程看起来很复杂,繁琐,其实分析之后,是很简单的一个过程,特别是make tgt=rom的整个过程。make cfg这个命令可能绕来绕去比较繁琐,但仔细梳理之后,也不难发现就那几个文件。

2024-04-09 20:53:50 1021 1

原创 PMON编译过程分析(四)- make cfg命令分析(下)

另外在上述内容中,@${CLIBMAKE}是由一些宏定义的命令,实现了进入libc目录,执行libc下的Makefile,查找denpend目标(之后写的目标又是depend)。初步分析,感觉上述两个步骤是为生成对应的.a文件做准备的,因为在现在已经将这两个二进制文件打包进来了,因此不需要编译。dvfs.bin是对应的二进制文件,dvfs.h是对应转换之后的文件,dvfs_data是转换后数组的名称,如下。判断在文件夹下是否有.c源文件,如果有的话,删除对应对应的.o,删除编译目录下的暂存文件。

2024-04-09 20:51:12 862

原创 PMON编译过程分析(三)- pmoncfg命令源码分析

以上就是基本的分析过程,还有一些创建哈系表的函数没有说明,上述的4个函数是pmoncfg命令操作过程的实现,基本的思路就是根据ls.3a5000_7a这个配置文件,去生成对应的配置,包括Makefile,设备相关的文件等等,为以下一步的编译做准备。实现函数:采用symlink函数,该函数是UNIX系统下创建符号链接的函数,使用时需要包含unistd.h库文件,创建成功后返回0;

2024-04-09 20:47:50 1122

原创 PMON编译过程分析(二)- Make cfg命令分析(上)

总之,这块主要是pmoncfg这个命令,在PMON中有对应的源码,这个命令大致的作用是处理配置文件的,将配置文件中option选项变成编译时的宏。ls.3a5000_7a就是pmoncfg的入口文件,也就是待处理的配置文件。那么pmoncfg loongson的这个命令就转变为成。

2024-04-09 20:45:35 465

原创 PMON编译过程分析(一)

【代码】PMON编译过程分析(一)

2024-04-09 20:40:46 306

原创 Jetson nano编译第一个驱动程序,挂载并运行

这次记录的内容是我使用nano板加载了自己的第一个驱动程序,并且测试成功!

2022-09-27 21:22:08 2758 1

原创 问题小结:解决Ubuntu18.04系统无法连接WIFI

本篇主要针对Linux系统安装后无发连接WIFI的问题加以讨论,并记录自己的解决方式。

2022-06-03 22:34:00 6837

原创 C++学习笔记12:转换函数+智能指针+模板

好久没有更新博客了,最近因为疫情搞得状态也不是特别好,现在逐渐看到了点希望。之前也计划5月份将侯捷老师C++的课程学习完毕,现在是时候做个总结了,只有总结了,才觉得学到了。Conversion function 转换函数转换函数是一种特殊的成员函数,可以实现对于对象类型之间的数据类型的转换,比如double转int。转换函数的写法为关键词 + 转换的类型,需要注意的一点为函数声明不需要有参数,也没有返回类型,在函数签名末尾要加上const operator double() const{ r

2022-05-29 21:25:10 324

原创 C++学习笔记11:面向对象高级编程(1-5)

C++学习笔记11:面向对象高级编程(1-5)本篇主要记录侯捷老师讲的C++ 面向对象高级编程课程1-5节的学习笔记和心得。杂碎知识点C++历史:起源于1983年,当时不叫C++,名字为C with class.C++ 是第一个面向对象语言,也是效率方便比较高的语言,后面的Java C# 都属于面向对象语言所谓的面向对象的意思就是不同于C语言的过程语言,C++将数据和方法进行整合在一起,组装成一个新的东西,这个新的东西就是Class.使用这个类可以去创建对象,使用类中的方法可以操作这个对象,.

2022-04-05 21:28:45 1033

原创 Prepar3D开发总结02:仪表与按键

上一期的博客总结中,Prepar3D开发总结01:模型与SDK详细介绍了Prepar3D二次开发的过程、以及开发过程中两个重要的配置文件。在先前的基础之上,我们一起来总结下在二次开发过程中,仪表与按键的开发流程。项目工程模板目录整个的二次开发工程,可以选用C++或者C#作为开发语言。在此我选择了C++作为整个项目的开发语言。打开模板项目工程,首先是工程的目录文件结构,如下图所示:整个CGaugeSample工程一共包括五大项,分别为引用、外部依赖项、Header Files、Resource F

2021-10-17 08:51:56 1964 1

原创 Prepar3D开发总结01:模型与SDK

怀着一颗未知的心,终于耗时一周打开了Prepar3D的大门,总结起来也并没有那么的复杂,但是需要配置的步骤可能会稍微繁琐。为防止以后遗忘,服务他人也方便自己,还是写几篇关于开发过程的博客总结吧。本篇主要总结准对使用Prepar3D开发仿真模型的总结,主要的部分为Prepar3D介绍与配置、飞机模型介绍与配置、以及SDK的实践。Prepar3D介绍与配置Prepar3DPrepar3D是一个可视化模拟平台,允许用户创建跨航空、海事和地面领域的训练场景。Prepar3D 通过真实环境让用户参与到沉浸式培

2021-09-11 17:04:01 6889 4

原创 OpenMV实践总结01:HelloWorld

OpenMV4总算有了进展,自己内心的那份疑惑或者说好奇也终于有了一点明朗。前段时间画的OpenMV4今天已经可以运行HelloWord程序了,在此对前面的工作包含电路设计、驱动软件等相关方面自己遇到的问题做一个简单总结。电路设计在电路设计方面主要是参照官网的开源电路图,在这个基础之上加以修改。在修改过程中,我主要考虑的就是这个元器件在国内是不是很容易买到,或者它的封装是不是常见的封装形式。在原来的电路图基础之上,主要做了以下修改:3.3V电压的产生由PAM2305AABADJ更改为常见的AMS1

2021-09-01 08:18:37 1943

原创 STM32&HAL笔记00:STM32及HAL库介绍

文章目录STM32&HAL笔记00:STM32及HAL库介绍STM32STM32功能概述嵌套的向量式中断控制器(NVIC)外部中断/事件控制器(EXIT)时钟和启动供电监视器低功耗模式DMARTC和后备寄存器独立看门狗定时器I2C总线通用同步/异步接收发送器(USART)SPI串行外设接口控制器区域网络(CAN)通用串行总线(USB)通用输入输出接口(GPIO)ADC(模拟/数字转换器)HAL库总结STM32&HAL笔记00:STM32及HAL库介绍一直想着有机会从头开始学习下STM32

2021-08-20 08:56:38 646

原创 对近期绘制PCB的的一些总结

在没有学习PCB绘制之前,就对PCB有着浓厚的兴趣,看到电路板上密密麻麻的线,就充满着好奇和成就感。在这一年的学习中,先是用国产EDA软件绘制成功自己第一块PCB,到现在熟练使用AD绘制各式各样的两层板,中间遇到了大大小小的困难,也出现了不同层级的失误,这篇文章主要对这些做一个总结和记录,以便以后查阅。AD绘制PCB的流程AD(Altium Designer)是原Protel软件开发商Altium公司推出的一体化的电子产品开发系统。目的在于帮助电子开发者快速高效地设计开发PCB(Printed Cir

2021-08-19 08:26:03 1058

原创 对32位单片机调试的总结

对于32位的ARM单片机,其程序烧录的方式除了采用原始的串口下载之外,还拥有即可烧录程序,也可在线调试的外部接口,即JTAG与SWD接口。单片机芯片指定了一些IO口在默认的配置下实现上述的功能,例如:PA13、A14、A15、PB3、PB4等。那么如何设置其中某几个IO口做普通使用呢,这篇文章将会给出答案。烧录方式目前我经常用的烧录方式有三种,最开始使用JTAG方式去下载调试32单片机,到后来发现更加简单方便的SWD方式,再到后面的ST-LINK,其实也是SWD方式。JTAG方式JTAG:JTAG

2021-08-18 08:19:06 1490

原创 对32位单片机串口的理解

文章目录串行通讯串行和并行比较数据帧波特率USART模块原理图及主要寄存器USART框图介绍主要寄存器状态寄存器数据寄存器控制寄存器USART发送实现USART接收实现总结串口这个功能应该是很常用、基础的一个功能,无论是电脑与设备还是设备与设备之间都可以采用串口进行传输数据。在前段时间调试单片机与Dwin串口屏通信的过程中,对于接收走了很多的弯路,后来准备系统地学习下单片机的串口收发,写成一篇博客,供以后参考。串行通讯串行和并行比较在数据传送过程中,分为串行和并行通信,其中并行通讯就是将数据的每一

2021-08-17 08:23:01 1784

原创 DWIN屏使用方法总结(上)

DWIN屏使用方法总结(上)DWIN屏使用方法总结(上)DWIN屏介绍开发工具ICL生成CFG修改工程建立与下载工程建立文件下载总结DWIN屏使用方法总结(上)DWIN屏的使用应该有一段时间了,期间使用它开发完成了两个项目。在项目中的显示交互部分均采用了DWIN屏,对于DWIN屏这种开发模式有了大概的了解,所以做一个总结,增加自己这方面的认知。DWIN屏介绍DWIN屏主要是用于一些工业上的人机界面交互,内部含有存储器,可以通过开发软件开发出符合要求的界面和展示效果。采用的通讯方式为串口通讯,所以也

2021-08-16 08:35:06 6681

原创 DWIN屏使用方法总结(下)

DWIN屏使用方法总结(下)DWIN屏使用方法总结(下)数据帧常用的系统指令常用控件基础触控按键返回数据变量录入图标变量数据变量显示总结DWIN屏使用方法总结(下)上一篇关于DWIN屏的总结学习中,描述了什么是DWIN屏以及这类串口屏幕在实际开发中的流程、相比于传统的LCD屏幕,这种屏幕有什么好的优点等等。这一篇呢,就是在上一篇的基础之上,对于屏幕在使用中的常用控件做简单的介绍,并阐述下用单片机程序如何解析与之相关的控件信息。数据帧屏幕默认选择串口2与外部设备进行通讯,在串行通讯的参数为:波特率/

2021-08-16 08:27:59 2177

空空如也

空空如也

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

TA关注的人

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