- 博客(70)
- 资源 (3)
- 收藏
- 关注
原创 STM32晶振的选择与计算
qquad皮尔斯振荡器是科尔皮茨振荡器的变体,广泛用于晶体谐振器。皮尔斯振荡器(见图5)需要减少一组外部元件,这导致较低的最终设计成本。此外,皮尔斯振荡器因其与晶体谐振器,特别是石英晶体谐振者配对时的稳定振荡频率而闻名。图5。皮尔斯振荡器电路•Inv:内部非门,用作放大器•Q:晶体石英或陶瓷谐振器•RF:内部反馈电阻•RExt:限制放大器输出电流的外部电阻器•CL1和CL2:是两个外部负载电容。
2023-10-01 16:53:50
4174
3
原创 【嵌入式环境下linux内核及驱动学习笔记-(19)LCD驱动框架2-FrameBuffer】
qquadLinux是工作在保护模式下,Linux抽象出FrameBuffer这个设备来供用户态进程实现直接写屏。\qquadFramebuffer机制模仿显卡的功能,将显卡硬件结构抽象掉,可以通过Framebuffer的读写直接对显存进行操作。用户可以将Framebuffer看成是显示内存的一个映像,将其映射到进程地址空间之后,就可以直接进行读写操作,而写操作可以立即反应在屏幕上。这种操作是抽象的,统一的。用户不必关心物理显存的位置、换页机制等等具体细节。
2023-08-13 23:38:20
1725
原创 【嵌入式环境下linux内核及驱动学习笔记-(18)LCD驱动框架1-LCD控制原理】
qquad从这张图就可以看出。白光经过楄光和液晶层后通过每一个像素的RGB的三个子像素后,就能呈现出彩色图像。\qquad因此,LCD的电路主要任务就是控制如图中的电极板,从而控制液晶形态而达到控制每个红兰绿子像素的秀光量。\qquad当前主流的LCD是TFT,特点是超薄、清晰。\qquad不同的组件之间的连接,需要做好很多约定,这些软硬件的约定构成了接口。在LCD的屏与控制器之间的接口是开发者重点要关注的。用于连接LCD驱动器与LCD控制器这间的软硬件规范。是芯片级的接口。在单片机上:MCU接口。
2023-08-06 21:38:07
2913
原创 PID控制系列--(1、最形象的PID)
比例§控制能迅速反应误差,从而减小稳态误差。但是,比例控制不能消除稳态误差。比例放大系数的加大.会引起系统的不稳定。积分(I)控制的作用是:只要系统有误差存在,积分控制器就不断地积累,输出控制量,以消除误差。因而,只要有足够的时间,积分控制将能完全消除误差,使系统误差为零,从而消除稳态误差。积分作用太强会使系统超调加大,甚至使系统出现振荡。微分(D)控制可以减小超调量,克服振荡,使系统的稳定性提高,同时加快系统的动态响应速度.减小调整时间,从而改善系统的动态性能。图7.1\qquad。
2023-07-17 22:59:58
516
翻译 bochs用户手册-8内部调试器
对于它的内置图形前端,请参阅调试器gui部分如何启用它。NOTE: The format of ‘seg’, ‘off’, and ‘addr’ in these descriptions,are as follows. I don’t have any way to set the current radix. 这些描述中“seg”、“off”和“addr”的格式,如下所示。现在,您可以在类似GDB的命令行调试器中进行有条件编译,该调试器允许您设置断点、逐步执行指令和其他有用的函数。
2023-07-17 11:40:16
97
翻译 bochs用户手册-7反馈和支持
如果你有一个非常重要且真正相关的Bochs公告,你可以尝试将其发布到Bochs公告上,但在发布之前必须得到主持人的批准。要订阅,请转到Bochs开发者信息页面,在web表单中键入您的电子邮件地址和密码,然后单击订阅。要取消订阅,请转到同一页面,在底部空白处键入您的电子邮件地址,然后单击“编辑选项”。,在web表单中键入您的电子邮件地址和密码,然后单击订阅。如果你熟悉C++,并且你可以编写一些代码来修复你的问题,你可以将其发布在bochs开发人员的邮件列表中,或者在SF补丁跟踪器中为bochs提交补丁。
2023-06-26 21:01:49
146
原创 【嵌入式环境下linux内核及驱动学习笔记-(17)内核驱动模块的启动机制】
qquad总结起来,初始化调用链表是一个全局变量,用于管理初始化函数。链表的元素是initcall_t类型的结构体,包含初始化函数的指针和优先级值。在init/main.c文件中的函数会遍历链表,并按照优先级依次调用其中的初始化函数。
2023-06-25 11:54:27
596
翻译 bochs用户手册-6常见问题及解决方法(故障排除)
因此,如果发生异常情况,或者是运行在其中的某些软件对某些(BIOS)功能或设备的不太常见的调用,Bochs有两种可能做出反应:如果命令看起来不重要(主要发生在BIOS中未实现的功能上),则会在日志文件中记录一条通知,然后继续模拟。如果您使用的是为DOS编写的程序,该程序似乎使用了文本模式,但没有正确显示文本,您可以尝试其他VGA BIOS,无论是最新的VGABIOS lgpl还是VGABIOS-elpin-2.40,请参阅vgaromimage选项。“询问”功能的外观取决于所使用的显示库和平台。
2023-06-22 21:01:11
366
翻译 bochs用户手册-5使用bochs
qquad如果Bochs是用5级或更高级别的cpu编译的,那么CPUID操作码是受支持的,它可以返回一些关于cpu模型及其功能的信息。当在Bochs中使用预定义的CPU模型时,CPUID报告的功能将根据模型的规范进行设置。下表显示了所有可用的CPU型号,并进行了简短说明。选择的数量取决于编译时启用的CPU功能(第3列)。表5-3。Bochs CPU型号。
2023-06-22 20:54:39
1219
翻译 bochs用户手册-4配置
注: VGA BIOS版本和ROM BIOS都是Bochs软件包的一部分。无需单独下载。详见第4.2节。注意:如果您想使用Cirrus SVGA适配器而不是VGA+Bochs VBE,您应该查看第9.19节。在这种情况下,您必须在命令行上传递配置选项,或者使用配置界面为模拟设置Bochs。如果使用配置文件(我们称之为bochsrc),运行Bochs会更容易。有关所有支持的选项,请参见第4.3节。首次设置Bochs的最简单方法是使用名为bochsrc-sample.txt的示例配置文件。
2023-06-21 09:57:55
1801
翻译 bochs用户手册-2-发行说明 3-安装
首先,将适用于您的体系结构的Bochs RPM下载到您的计算机上。在使用顶部文件夹中的Bochs.scpt之前,您需要配置Bochs,因此要尝试Bochs,请打开dlxlinux文件夹,双击其中的Bochs.cpt图标。一旦你玩完DLX Linux,只需在Bochs窗口中键入“reboot”即可关闭DLX Linux操作系统,当它再次启动时,请按“MacBochs硬件控制”窗口中的“电源”按钮(它是一个包含竖线的圆圈,位于在最右边,请查看Linux屏幕截图,因为Mac版本似乎没有描述或工具提示)。
2023-06-13 12:23:30
670
1
翻译 bochs用户手册-1简介
qquadBochs是一个模拟完整的英特尔x86计算机的程序。它包括Intel x86 CPU的仿真、常见I/O设备和自定义BIOS。Bochs可以被编译来模拟许多不同的x86 CPU,从早期的386到最新的x86-64 Intel和AMD处理器,这些处理器甚至可能还没有进入市场。Bochs解释从通电到重新启动的每一条指令,并为所有标准PC外围设备提供了设备型号:键盘、鼠标、VGA卡/显示器、磁盘、定时器芯片、网卡等。因为Bochs模拟整个PC环境,所以在模拟中运行的软件“相信”它是在真实的机器上运行的。
2023-06-13 11:21:44
825
原创 【嵌入式环境下linux内核及驱动学习笔记-(16)linux总线、设备、驱动模型之input框架】
qquad这部分可以在阅读完其它部分后,再来看这个总结,会有更清晰的认识。1、input子系统是一个针对输入类型硬件的高度标准化的驱动框架。2、在充分的归纳驱动行为的基础上,把驱动由3层1事件来实现。这3层从上到下就是(事件处理层、核心层、设备驱动层),而一个事件指的就是struct input_event。3、开发者只需要编写设备驱动层对应的驱动程序即可。事件处理层以及核心层的处理,由内核实现。而串起这些内核 处理的核心又是事件类型(EVENT TYPE)与事件码(EVENT CODE)。
2023-06-11 23:43:39
1743
原创 【嵌入式环境下linux内核及驱动学习笔记-(15)linux总线、设备、驱动模型之I2C总线】
define I2C_CLASS_HWMON (1
2023-06-09 11:41:08
2394
翻译 bochs用户手册-3.4编译
在这种情况下,必须将丢失的DLL从例如Cygwin文件夹复制到编译的EXE文件的位置。有一个名为configure的脚本,它测试您的机器、C/C++编译器和库,以发现哪些设置应该在您的系统上工作。该问题的当前解决方案是,Bochs配置脚本必须在支持shell脚本的不同平台上运行,并带有使其配置为Win32平台而不是本机平台的选项。如果你在FreeBSD上,并且使用ports集合安装了SDL,Bochs将无法自动找到库,因为在这种情况下,SDL配置脚本被称为sdl11-config(即使是1.2版本)。
2023-06-05 17:51:47
983
原创 【嵌入式环境下linux内核及驱动学习笔记-(14)linux总线、设备、驱动模型之platform】
传统的驱动方式,驱动代码与设备数据混在一个程序文件中,这会导致开发不方便以及一些功能难以支持:\qquad为了使得一个驱动可以在不同平台上适配同一类但资源分配不同的设备。这时需要使得设备资源信息独立于驱动,驱动不再绑定具体设备。因此这种思路下就形成了总线设备驱动模型。\qquad这个总线、设备、驱动模型的目的在于使驱动只管驱动,设备只管设备资源,总线负责匹配设备和驱动。驱动则以标准途径拿到板级信息,这样,驱动就可以独立于具体的设备。\qquad在linux2.6以后的设备驱动模型中,需关心总线、设备和驱动
2023-06-02 11:06:33
1068
原创 【嵌入式环境下linux内核及驱动学习笔记-(13-中断管理)】
该节点定义在设备树文件在arch/arm/boot/dts/exynos4.dtsi中,系统已帮我们写好,需要知道其含义,以及该含义的出处。
2023-05-28 11:42:56
2227
原创 【嵌入式环境下linux内核及驱动学习笔记-(11-设备树)】
1、ranges属性值的格式 , 表示将local地址向parent地址的转换。比如对于#address-cells和#size-cells都为1的话,以为例,表示将local的从0x0—(0x0 + 0x20)的地址空间映射到parent的0x10—(0x10 + 0x20)
2023-05-13 18:11:41
2613
原创 【嵌入式环境下linux内核及驱动学习笔记-(10-内核内存管理)】
对于包含MMU(内存管理单元)的处理器而言,linux系统以虚拟内存的方式为每个进程分配最大4GB的内存。这真的4GB的内存空间被分为两个部分–用户空间 与 内核空间。用户空间地地址分布为0~3GB,剩下的3 ~ 4GB 为内核空间。如下图。用户进程通常只能访问用户空间的虚拟地址,不能访问内核空间的虚拟地址。用户进程只有通过系统调用(代表用户进程在内核态执行)等方式才可以访问到内核空间。每个进程的用户空间都是独立的,互不相干,用户进程各自有不同的页表。
2023-05-08 16:09:35
1337
原创 【嵌入式环境下linux内核及驱动学习笔记-(9-内核定时器)】
/ 期望的时间值 当前jiffies + x * HZ 做为超时时间 void(* function)(unsigned long);// 时间到达后,执行的回调函数,该函数处于软中断异常上下文,因此该回调函数内不允许有阻塞操作 unsigned long data;//传给回调的参数 };将 entry.pprev 字段置为空,以标识定时器未插入任何链表。设置 function 字段为传入的回调函数 callback。
2023-05-04 20:09:00
1039
原创 【嵌入式环境下linux内核及驱动学习笔记-(8-内核 I/O)-信号驱动】
信号是软中断,用于通知进程某个事件已经发生。进程可以选择如何响应信号:忽略、默认处理、自定义处理等。常见信号有:SIGINT(键盘中断)、SIGKILL(强制终止)、SIGSTOP(暂停进程)、SIGCONT(继续运行进程)等。信号值信号名说明1SIGHUP终端断线,用于进程与控制终端的连接2SIGINT键盘中断,用于进程的输入终端3SIGQUIT键盘的退出键(Ctrl+/)4SIGILL非法指令5SIGTRAP跟踪陷阱6SIGABRT。
2023-04-30 12:08:39
1214
原创 【嵌入式环境下linux内核及驱动学习笔记-(6-内核 I/O)-阻塞与非阻塞】
在linux内核中,链表是一个非常重要的数据结构。与通常做法中的链表不同,Linux内核方式与众不同,它不是将数据结构塞入链表,而是将链表节点塞入数据结构。这样链表就可以链接在任意的数据结构上。int a;char *c;list_head节点之间前后串联,形成一个数据链表,如示意图,示意中只出现了单向循环。这样,当取得一个list_head的地址后,就可以通过container_of()宏而取得整个数据结构的地址。具体是通过list_entry()宏取得的。
2023-04-30 12:02:26
1563
原创 【嵌入式环境下linux内核及驱动学习笔记-(5-驱动的并发控制机制)】
执行流:有开始有结束总体顺序执行的一段代码 又称上下文。对于应用层编程而言,只有任务上下文。对于内核编程而言,即有任务上下文也有异常上下文。竞态:多任务并行执行时,如果在一个时刻同时操作同一个资源,会引起资源的错乱,这种错乱情形被称为竞态共享资源:可能会被多个任务同时使用的资源。临界区:操作共享资源的代码段。并发控制机制:为了解决竞态,需要提供一种控制机制,来避免在同一时刻使用共享资源,这种机制被称为并发控制机制对互斥锁初始化为可用 --> 对互斥锁进行P操作锁定 --> 临界区 --> 对
2023-04-20 22:47:55
987
2
原创 【嵌入式环境下linux内核及驱动学习笔记-(3-字符设备驱动详解)】
项目说明语法功能将主设备号和次设备号转换成dev_t类型头文件参数major为主设备号,minor为次设备号宏定义返回值成功执行返回dev_t类型的设备编号变量用途说明设备号,标识设备的身份标号,可以解析出主设备号与次设备号创建于驱动加载之时,也存于cdev结构体内表示设备的结构体,将设备号与操作函数结构体file_operations关联起来创建于驱动加载之时,加载到内核的cdev链表中驱动实际操作的函数入口,是具体的设备驱动函数集合的入口。
2023-04-10 23:04:20
1654
3
原创 【嵌入式环境下linux内核及驱动学习笔记-(2-linux内核模块)】
模块本身不被编译入内核映像,从而使内核映像比较精简。模块被加载后,其与其它内核进程没有区别。内核模块的本质:一段隶属于内核的“动态”代码,与其它内核代码是同一个运行实体,共用同一套运行资源,只是存在形式上是独立的。记住,内核模块的运行是在内核空间里的。
2023-04-08 11:35:47
638
原创 【嵌入式环境下linux内核及驱动学习笔记-(1-linux内核结构)】
一个32位处理器的Linux的每个进程享有4G空间,一般0-3G属于用户空间,3G-4G属于内核空间。在ARM环境中,Linux系统充分利用CPU的硬件特性,实现了两级的操作模式,用户(usr)模式和管理模式(svc)。如图,虚拟文件系统为上层的应用程序提供了统一的调用接口,对下则负责调用具体底层文件系统或设备驱动中实现的file_operations结构体中的成员函数。如图,有操作系统后,应用程序可以不管具体的硬件细节,而都使用操作系统API的统一接口,这样利于大规模标准化开发,提高开发效率。
2023-04-07 11:14:51
1773
原创 【嵌入式环境下linux内核及驱动学习笔记-开篇】
从本篇开始,进入了linux内核及驱动的学习。linux庞大而复杂,在嵌入式编程的过程中,会涉及大量的linux内核和驱动的相关知识。因此,对linux的学习也是一个循续渐近以及持之以恒的过程。需要不断积累,以及积累不断。
2023-04-07 11:10:02
1007
5
原创 【ESP32+freeRTOS学习笔记之“ESP32环境下使用freeRTOS的特性分析(4-多核下的临界区)”】
临界区API可以递归调用(即嵌套的临界区)。多次递归地输入一个临界区是有效的,只要临界区的退出次数与进入的次数相同。然而,考虑到临界区可以针对不同的自旋锁,用户在递归进入临界区时应该注意避免死锁。首先,内核禁用其中断(或中断嵌套),禁用的最高级别可达configMAX_SYSCALL_interrupt_PRIORITY 宏所规定的数值。对于taskEXIT_CRITICAL(&mux)(或taskEXIT_CRITICAL_ISR(&mux))临界区的其余部分在禁用中断(或中断嵌套)的情况下运行。
2023-04-07 10:59:23
1449
原创 【ESP32+freeRTOS学习笔记之“ESP32环境下使用freeRTOS的特性分析(3-多核环境下的调度)”】
在ESP32环境中,双核的特性,使得FreeRTOS在调度方面必须要考虑在双核上的区别对待。CPU0与CPU1上调度相关的责任和效果是有区别的。这些特殊细节,在编程过程中要重视。
2023-04-06 11:22:42
1871
原创 【ESP32+freeRTOS学习笔记之“ESP32环境下使用freeRTOS的特性分析(2-多核环境中的任务)”】
在多核环境下,Vanilla FreeRTOS 在任务的创建与删除的行为会在为双核的选择原因而有行为上的改变。这个改变不是很大,但需要考虑到双核环境的特殊性。
2023-04-04 22:09:47
2728
原创 【ESP32+freeRTOS学习笔记之“ESP32环境下使用freeRTOS的特性分析(1-启动分析)”】
上面这些原码分析,清楚地看到FreeRTOS在ESP32平台中的这些特殊的地方:1、不需要我们再调用vTaskStartScheduler()函数来启动调度器,因此系统已经帮我们调用了。2、主函数app_main()本身也是个任务,这个任务的优先级是1,而且该任务只要一返回,就被删除。所以我们在这个主函数中总是把该建的其它任务都建好,然后尽量返回,让系统回收了这个任务。
2023-03-15 20:38:31
3156
原创 【ESP32+freeRTOS学习笔记之“ESP32环境下使用freeRTOS的特性分析(新的开篇)”】
FreeRTOS允许端口和应用程序通过添加各种#define config…。通过这些宏,可以启用或禁用内核的调度行为和各种内核功能。但是,在ESP-IDF FreeRTOS中,文件被视为私有文件,用户不得修改。任何向用户公开的FreeRTOS配置都将通过menuconfig完成。ESP-IDF FreeRTOS可以在Component Config/FreeRTOS下的项目配置菜单(IDF.py menuconfig)中配置。
2023-03-10 18:02:27
2507
原创 【ESP32+freeRTOS学习笔记-(十)任务通知机制】
总之,任务通知机制,也是任务之间传送事件与数据的一个工具。是一个能替代二进制信号量,计数信号量,事件组,队列更高效的机制。任务通知机制传送效率更高,占用的RAM更小。FreeRTOS提供了两套使用任务通知机制的API函数,一套是简单方便的xTaskNotifyGive()和 ulTaskNotifyTake(),另一套是功能更强大灵活的API函数 xTaskNotify()和xTaskNotifyWait()函数。
2023-03-02 09:55:35
1572
原创 【ESP32+freeRTOS学习笔记-(九)事件组】
实时嵌入式系统必须采取行动来响应事件。前面描述了 FreeRTOS 允许将事件传递给任务的功能。此类功能包括信号量和队列,它们都具有以下属性:-》它们允许任务在阻塞状态下等待单个事件发生。-》当事件发生时,它们解除对单个任务的阻塞——解除阻塞的任务是等待事件的最高优先级任务。事件组是 FreeRTOS 的另一个功能,它允许将事件传达给任务。与队列和信号量不同:事件组允许任务在阻塞状态下等待多个事件之一的组合发生。事件组在事件发生时解除等待同一事件或事件组合的所有任务的阻塞。
2023-02-22 09:28:38
1461
原创 【ESP32+freeRTOS学习笔记-(八)资源管理】
多任务系统中,任务对资源占用以及协调是非常重要的。即要保证占用资源的任务能不被干扰的使用,也要防止出现死锁。FreeRTOS针对不同类型的使用场景,提供了从禁用中断,禁用调度这类系统级的资源使用手段。也提供了互斥信号量,嵌套互斥信号量等应用级的资源使用手段。也提供了Gatekeeper Tasks(网守任务)方式的资源使用方案。因为任务调度模式导至的多种使用资源可能出现死锁的场景,FreeRTOS提供了优先级继承,递归互斥锁的机制解决。
2023-02-16 15:02:54
3210
原创 【ESP32+freeRTOS学习笔记-(七)中断管理】
MCU中都是以中断的方式处理各类事件,需要硬件的支持。因此中断系统是一个非常重要的系统。而FreeRTOS是以任务的方式处理事件。任务是纯软件的方式。因此FreeRTOS不可避免的要同时处理好硬件层的中断与软件层的任务的关系。中断是需要硬件支持 的,但是中断被触发后,必然要跳转到中断处理程序ISR去完成后续的事件处理,而ISR则是软件代码。也就是说不论硬件的中断还是软件的任务,最终的处理其实都是软件的代码实现。
2023-02-09 15:59:39
3827
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人