<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Abcd_cnom的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Abcd_cnom</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Abcd_cnom]]></copyright><item><title><![CDATA[BM1 反转链表]]></title><link>https://blog.youkuaiyun.com/Abcd_cnom/article/details/142727695</link><guid>https://blog.youkuaiyun.com/Abcd_cnom/article/details/142727695</guid><author>Abcd_cnom</author><pubDate>Sun, 06 Oct 2024 15:42:47 +0800</pubDate><description><![CDATA[【代码】BM1 反转链表。]]></description><category></category></item><item><title><![CDATA[STM32开发之移植FreeRtos]]></title><link>https://blog.youkuaiyun.com/Abcd_cnom/article/details/140638542</link><guid>https://blog.youkuaiyun.com/Abcd_cnom/article/details/140638542</guid><author>Abcd_cnom</author><pubDate>Fri, 09 Aug 2024 19:57:02 +0800</pubDate><description><![CDATA[（1）打开keil新建工程文件夹（2）选择芯片型号接下来会弹出来一个新建工程的小助手，我们关闭就好，接下来我们的工程就创建好了，但是工程还是空的。]]></description><category></category></item><item><title><![CDATA[Linux驱动开发-06蜂鸣器和多组GPIO控制]]></title><link>https://blog.youkuaiyun.com/Abcd_cnom/article/details/140447636</link><guid>https://blog.youkuaiyun.com/Abcd_cnom/article/details/140447636</guid><author>Abcd_cnom</author><pubDate>Fri, 19 Jul 2024 19:27:40 +0800</pubDate><description><![CDATA[我们可以看到SNVS_TAMPER1是这个端口在控制着蜂鸣器，同时这是一个PNP型的三极管，在端口输出为低电平时，蜂鸣器响，在高电平时，蜂鸣器不响。]]></description><category></category></item><item><title><![CDATA[Linux驱动开发-05APP和驱动的交互方式]]></title><link>https://blog.youkuaiyun.com/Abcd_cnom/article/details/140388942</link><guid>https://blog.youkuaiyun.com/Abcd_cnom/article/details/140388942</guid><author>Abcd_cnom</author><pubDate>Fri, 19 Jul 2024 19:27:02 +0800</pubDate><description><![CDATA[这些文件提供了关于该 GPIO 控制器的其他信息，如它在设备树中的位置、电源管理信息、子系统信息等。这些目录提供了关于该 GPIO 控制器的信息，包括它管理的 GPIO 引脚的范围和数量。，这意味着从 GPIO 96 开始，这个控制器管理接下来的 32 个 GPIO 引脚（即 GPIO 96 到 GPIO 127）。下获得一个新的目录（以 GPIO 引脚编号命名），您可以在该目录中读取或写入文件来配置和查询 GPIO 引脚的状态。：这个文件显示了该 GPIO 控制器管理的 GPIO 引脚的数量。]]></description><category></category></item><item><title><![CDATA[Linux驱动开发-04LED灯驱动实验（直接操作寄存器）]]></title><link>https://blog.youkuaiyun.com/Abcd_cnom/article/details/140325232</link><guid>https://blog.youkuaiyun.com/Abcd_cnom/article/details/140325232</guid><author>Abcd_cnom</author><pubDate>Fri, 12 Jul 2024 17:14:29 +0800</pubDate><description><![CDATA[Linux 下的任何外设驱动，最终都是要配置相应的硬件寄存器。驱动访问底层的硬件除了使用内存映射将物理地址空间转化为虚拟地址空间，去进行读写修改，还可以通过各种子系统函数去进行操作。]]></description><category></category></item><item><title><![CDATA[Linux驱动开发-03字符设备驱动框架搭建]]></title><link>https://blog.youkuaiyun.com/Abcd_cnom/article/details/140000490</link><guid>https://blog.youkuaiyun.com/Abcd_cnom/article/details/140000490</guid><author>Abcd_cnom</author><pubDate>Tue, 09 Jul 2024 23:26:37 +0800</pubDate><description><![CDATA[** @description		: 打开设备* @param - inode 	: 传递给驱动的inode* @param - filp 	: 设备文件，file结构体有个叫做private_data的成员变量* 					 一般在open的时候将private_data指向设备结构体。* @return 			: 0 成功;其他 失败*//** @description		: 从设备读取数据* @param - filp 	: 要打开的设备文件(文件描述符)]]></description><category></category></item><item><title><![CDATA[Linux应用开发-第四章Linux的多进程开发（1）]]></title><link>https://blog.youkuaiyun.com/Abcd_cnom/article/details/140186145</link><guid>https://blog.youkuaiyun.com/Abcd_cnom/article/details/140186145</guid><author>Abcd_cnom</author><pubDate>Sat, 06 Jul 2024 15:54:57 +0800</pubDate><description><![CDATA[在三态模型中，进程状态分为三个基本状态，即就绪态，运行态，阻塞态。在五态模型中，进程分为新建态、就绪态，运行态，阻塞态，终止态。子进程和父进程是运行在不同的内存空间中，它们内存空间的内容是一样的（文件读写和映射不会影响另外一个内存空间）注意：fork之后父子进程共享文件，fork产生的子进程与父进程相同的文件文件描述符指向相同的文件表，引用计数增加，共享文件偏移指针。PCB(Processing Control Block)进程控制块，维护进程相关的信息]]></description><category></category></item><item><title><![CDATA[Linux应用开发-第三章Linux的目录IO]]></title><link>https://blog.youkuaiyun.com/Abcd_cnom/article/details/140181828</link><guid>https://blog.youkuaiyun.com/Abcd_cnom/article/details/140181828</guid><author>Abcd_cnom</author><pubDate>Thu, 04 Jul 2024 17:37:04 +0800</pubDate><description><![CDATA[实验：实验mkdir去创建一个aaa目录，权限是0777（因为是8进制，前面需要加0）实验目的：我们把上一节创建的aaa目录改成bbb目录。实验目的：获取当前的工作目录后再修改当前的工作目录。]]></description><category></category></item><item><title><![CDATA[Linux应用开发-第二章Linux的文件IO]]></title><link>https://blog.youkuaiyun.com/Abcd_cnom/article/details/140051601</link><guid>https://blog.youkuaiyun.com/Abcd_cnom/article/details/140051601</guid><author>Abcd_cnom</author><pubDate>Thu, 04 Jul 2024 15:23:38 +0800</pubDate><description><![CDATA[*作用：获取一个文件相关的一些信息参数:- pathname：操作的文件的路径- statbuf：结构体变量，传出参数，用于保存获取到的文件的信息返回值：成功：返回0失败：返回-1 设置errno//这个函数是查看软连接文件的信息参数:- pathname：操作的文件的路径- statbuf：结构体变量，传出参数，用于保存获取到的文件的信息返回值：成功：返回0失败：返回-1 设置errno*/]]></description><category></category></item><item><title><![CDATA[Linux驱动开发-02字符设备驱动开发初步]]></title><link>https://blog.youkuaiyun.com/Abcd_cnom/article/details/139868497</link><guid>https://blog.youkuaiyun.com/Abcd_cnom/article/details/139868497</guid><author>Abcd_cnom</author><pubDate>Wed, 26 Jun 2024 16:44:40 +0800</pubDate><description><![CDATA[modprobe命令默认会去/lib/modules/<kernel-version>目录中查找模块，比如本书使用的 Linux kernel的版本号为 4.1.15因此 modprobe命令默认会到 /lib/modules/4.1.15这个目录中查找相应的驱动模块，一般自己制作的根文件系统中是不会有这个目录的，所以需要自己手 动创建。insmod命令不能解决模块的依赖关系，modprobe会分析模块的依赖关系，然后会将所有的依赖模块都加载到内核中，我们使用。查看当前驱动模块是否有我们刚刚加载的模块。]]></description><category></category></item><item><title><![CDATA[FreeRtos-14调试与优化]]></title><link>https://blog.youkuaiyun.com/Abcd_cnom/article/details/139879765</link><guid>https://blog.youkuaiyun.com/Abcd_cnom/article/details/139879765</guid><author>Abcd_cnom</author><pubDate>Sun, 23 Jun 2024 20:45:03 +0800</pubDate><description><![CDATA[不建议去加上一下打印信息，我们的内核源码中已经写的比较清楚，如果有错的话，程序会中止；在FreeRTOS中，我们也可以查看任务使用CPU的情况、使用栈的情况，然后针对性地进行优化。我们需要比Tick更快的时钟，比如Tick周期时1ms，我们可以使用另一个定时器，让它发生中断的周期时0.1ms甚至更短。很不精确，因为有更高优先级的任务就绪时，当前任务还没运行一个完整的Tick就被抢占了。configASSERT(x)中，如果x为假，表示发生了很严重的错误，必须停止系统的运行。难以处理的是内存越界、栈溢出等。]]></description><category></category></item><item><title><![CDATA[Linux驱动开发-01配置开发环境]]></title><link>https://blog.youkuaiyun.com/Abcd_cnom/article/details/139723729</link><guid>https://blog.youkuaiyun.com/Abcd_cnom/article/details/139723729</guid><author>Abcd_cnom</author><pubDate>Mon, 17 Jun 2024 17:39:31 +0800</pubDate><description><![CDATA[使用桥接网卡时 Ubuntu 就是使用一个真实的网卡 ：开发板的网线也连接到这个真实的网卡上，这样 Windows 、 Ubuntu 、开发板就都可以用过这个网卡互通了。这里作者的开发板和电脑都是直接接在路由器上，三者可以ping通。]]></description><category></category></item><item><title><![CDATA[FreeRtos-13资源管理]]></title><link>https://blog.youkuaiyun.com/Abcd_cnom/article/details/139709884</link><guid>https://blog.youkuaiyun.com/Abcd_cnom/article/details/139709884</guid><author>Abcd_cnom</author><pubDate>Sat, 15 Jun 2024 22:36:47 +0800</pubDate><description><![CDATA[要独占式地访问临界资源，有3种方法：1.公平竞争：比如使用互斥量，谁先获得互斥量谁就访问临界资源，这部分内容前面讲过。谁要跟我抢，我就灭掉谁：2.中断要跟我抢？我屏蔽中断3.其他任务要跟我抢？我禁止调度器，不运行任务切换。]]></description><category></category></item><item><title><![CDATA[FreeRtos-12中断管理]]></title><link>https://blog.youkuaiyun.com/Abcd_cnom/article/details/139708405</link><guid>https://blog.youkuaiyun.com/Abcd_cnom/article/details/139708405</guid><author>Abcd_cnom</author><pubDate>Sat, 15 Jun 2024 22:11:42 +0800</pubDate><description><![CDATA[FreeRTOS通过中断优先级和任务优先级两个独立的机制来管理中断和任务。中断优先级决定了中断之间的处理顺序，而任务优先级决定了任务之间的调度顺序。中断优先级总是高于任务优先级，即中断可以打断任务的执行。硬件中断和软件中断在触发方式和用途上有所不同，但都是通过中断机制来处理的。]]></description><category></category></item><item><title><![CDATA[FreeRtos-11定时器]]></title><link>https://blog.youkuaiyun.com/Abcd_cnom/article/details/139634699</link><guid>https://blog.youkuaiyun.com/Abcd_cnom/article/details/139634699</guid><author>Abcd_cnom</author><pubDate>Thu, 13 Jun 2024 18:52:16 +0800</pubDate><description><![CDATA[也就是说：我们每次触发定时器后，就需要尽快去执行守护任务，就需要提高它的优先级让它先执行（我们的tick中断中只负责任务调度）；通过这里我们可以看到：一旦我们将守护任务的优先级设置低于用户任务，那怕我们在用户任务中Timestart也还是无法运行定时器回调函数。这个函数（我们需要知道这个函数的优先级，如果它的优先级太低会被高优先级打断，在触发后它应该马上去执行定时器的任务函数）所以，我们的回调函数的是在某个任务中执行（类似于空闲任务的钩子函数一样），这个任务叫做。在下面我们就创建了一个守护任务的函数。]]></description><category></category></item><item><title><![CDATA[FreeRtos-10任务通知]]></title><link>https://blog.youkuaiyun.com/Abcd_cnom/article/details/139602810</link><guid>https://blog.youkuaiyun.com/Abcd_cnom/article/details/139602810</guid><author>Abcd_cnom</author><pubDate>Tue, 11 Jun 2024 22:59:52 +0800</pubDate><description><![CDATA[任务通知的发送者和接收者是多对一的问题（使用任务通知时，只能通知指定任务）发送方：要么发送成功或者失败（不能等待），接收方：可以等待（因为TCB结构体里面没有list让发送者阻塞在上面，所以发送者不会阻塞）]]></description><category></category></item><item><title><![CDATA[FreeRtos-09事件组的使用]]></title><link>https://blog.youkuaiyun.com/Abcd_cnom/article/details/139594637</link><guid>https://blog.youkuaiyun.com/Abcd_cnom/article/details/139594637</guid><author>Abcd_cnom</author><pubDate>Tue, 11 Jun 2024 16:12:53 +0800</pubDate><description><![CDATA[事件组：就是通过一个整数的bit位来代表一个事件，几个事件的or和and的结果是输出。]]></description><category></category></item><item><title><![CDATA[FreeRtos-08互斥量]]></title><link>https://blog.youkuaiyun.com/Abcd_cnom/article/details/139504885</link><guid>https://blog.youkuaiyun.com/Abcd_cnom/article/details/139504885</guid><author>Abcd_cnom</author><pubDate>Thu, 06 Jun 2024 23:07:28 +0800</pubDate><description><![CDATA[二进制信号量并不能保证谁上锁谁解锁的问题，虽然二进制信号量可以实现互斥，但是这种互斥是有问题的；所以，我们引入了互斥量主要是为了解决优先级反转和递归上锁/解锁的问题。互斥量的出现，主要是为了更好的保证资源独占（同一时刻只有一个任务在占领资源）和竞争造成的数据出错，比如06中的数据竞争导致sum的值出问题FreeRtos的互斥量并没有实现谁上锁，就由谁解锁的问题，只能靠程序员来实现。]]></description><category></category></item><item><title><![CDATA[FreeRtos-07信号量]]></title><link>https://blog.youkuaiyun.com/Abcd_cnom/article/details/139465193</link><guid>https://blog.youkuaiyun.com/Abcd_cnom/article/details/139465193</guid><author>Abcd_cnom</author><pubDate>Thu, 06 Jun 2024 16:44:33 +0800</pubDate><description><![CDATA[计数型信号量（也称为二进制信号量或互斥信号量）主要用于控制对共享资源的访问，实现任务的同步，但它本身并不直接提供数据的完整性或一致性的保护。当多个线程或进程访问共享数据时，可能会发生数据竞争（data race）或其他并发问题，这些问题可能导致数据不一致或损坏。]]></description><category></category></item><item><title><![CDATA[FreeRtos-06队列的管理]]></title><link>https://blog.youkuaiyun.com/Abcd_cnom/article/details/139381312</link><guid>https://blog.youkuaiyun.com/Abcd_cnom/article/details/139381312</guid><author>Abcd_cnom</author><pubDate>Mon, 03 Jun 2024 23:22:10 +0800</pubDate><description><![CDATA[1.创建队列函数/*第一个参数是队列长度；第二个参数是队列里面元素的数据类型大小（字节）队列创建成功后，会返回一个句柄,创建失败返回0*/2.队列的TCB结构体和任务创建一样，在创建完队列后，它也会返回一个类似的TCB句柄union} u;} xQUEUE;* `pcHead`：通常指向队列存储区域的起始地址。它是不移动的，环形Buf的头指针* `pcWriteTo`：指向队列中下一个要写入数据的位置。]]></description><category></category></item></channel></rss>