编程者也
这个作者很懒,什么都没留下…
展开
-
FreeRtos-14调试与优化
不建议去加上一下打印信息,我们的内核源码中已经写的比较清楚,如果有错的话,程序会中止;在FreeRTOS中,我们也可以查看任务使用CPU的情况、使用栈的情况,然后针对性地进行优化。我们需要比Tick更快的时钟,比如Tick周期时1ms,我们可以使用另一个定时器,让它发生中断的周期时0.1ms甚至更短。很不精确,因为有更高优先级的任务就绪时,当前任务还没运行一个完整的Tick就被抢占了。configASSERT(x)中,如果x为假,表示发生了很严重的错误,必须停止系统的运行。难以处理的是内存越界、栈溢出等。原创 2024-06-23 20:45:03 · 143 阅读 · 0 评论 -
FreeRtos-13资源管理
要独占式地访问临界资源,有3种方法:1.公平竞争:比如使用互斥量,谁先获得互斥量谁就访问临界资源,这部分内容前面讲过。谁要跟我抢,我就灭掉谁:2.中断要跟我抢?我屏蔽中断3.其他任务要跟我抢?我禁止调度器,不运行任务切换。原创 2024-06-15 22:36:47 · 205 阅读 · 0 评论 -
FreeRtos-12中断管理
FreeRTOS通过中断优先级和任务优先级两个独立的机制来管理中断和任务。中断优先级决定了中断之间的处理顺序,而任务优先级决定了任务之间的调度顺序。中断优先级总是高于任务优先级,即中断可以打断任务的执行。硬件中断和软件中断在触发方式和用途上有所不同,但都是通过中断机制来处理的。原创 2024-06-15 22:11:42 · 315 阅读 · 0 评论 -
FreeRtos-11定时器
也就是说:我们每次触发定时器后,就需要尽快去执行守护任务,就需要提高它的优先级让它先执行(我们的tick中断中只负责任务调度);通过这里我们可以看到:一旦我们将守护任务的优先级设置低于用户任务,那怕我们在用户任务中Timestart也还是无法运行定时器回调函数。这个函数(我们需要知道这个函数的优先级,如果它的优先级太低会被高优先级打断,在触发后它应该马上去执行定时器的任务函数)所以,我们的回调函数的是在某个任务中执行(类似于空闲任务的钩子函数一样),这个任务叫做。在下面我们就创建了一个守护任务的函数。原创 2024-06-13 18:52:16 · 242 阅读 · 0 评论 -
FreeRtos-10任务通知
任务通知的发送者和接收者是多对一的问题(使用任务通知时,只能通知指定任务)发送方:要么发送成功或者失败(不能等待),接收方:可以等待(因为TCB结构体里面没有list让发送者阻塞在上面,所以发送者不会阻塞)原创 2024-06-11 22:59:52 · 205 阅读 · 0 评论 -
FreeRtos-09事件组的使用
事件组:就是通过一个整数的bit位来代表一个事件,几个事件的or和and的结果是输出。原创 2024-06-11 16:12:53 · 320 阅读 · 0 评论 -
FreeRtos-08互斥量
二进制信号量并不能保证谁上锁谁解锁的问题,虽然二进制信号量可以实现互斥,但是这种互斥是有问题的;所以,我们引入了互斥量主要是为了解决优先级反转和递归上锁/解锁的问题。互斥量的出现,主要是为了更好的保证资源独占(同一时刻只有一个任务在占领资源)和竞争造成的数据出错,比如06中的数据竞争导致sum的值出问题FreeRtos的互斥量并没有实现谁上锁,就由谁解锁的问题,只能靠程序员来实现。原创 2024-06-06 23:07:28 · 101 阅读 · 0 评论 -
FreeRtos-07信号量
计数型信号量(也称为二进制信号量或互斥信号量)主要用于控制对共享资源的访问,实现任务的同步,但它本身并不直接提供数据的完整性或一致性的保护。当多个线程或进程访问共享数据时,可能会发生数据竞争(data race)或其他并发问题,这些问题可能导致数据不一致或损坏。原创 2024-06-06 16:44:33 · 90 阅读 · 0 评论 -
FreeRtos-06队列的管理
1.创建队列函数/*第一个参数是队列长度;第二个参数是队列里面元素的数据类型大小(字节)队列创建成功后,会返回一个句柄,创建失败返回0*/2.队列的TCB结构体和任务创建一样,在创建完队列后,它也会返回一个类似的TCB句柄union} u;} xQUEUE;* `pcHead`:通常指向队列存储区域的起始地址。它是不移动的,环形Buf的头指针* `pcWriteTo`:指向队列中下一个要写入数据的位置。原创 2024-06-03 23:22:10 · 107 阅读 · 0 评论 -
FreeRtos-05同步和互斥
我们根据这两个对比可以看到,在任务一执行的过程中,我们的任务二会一直去访问计算结束标志位,造成CPU资源的浪费;所以两个任务同步实现所占用的时间比一个任务完成的时间会多30ms左右。同步的缺点:在等待期间不停访问,造成CPU资源浪费互斥不稳定的原因是detT太长了。原创 2024-06-01 23:02:02 · 87 阅读 · 0 评论 -
FreeRtos-04任务管理
对FreeRtos的任务管理进行深入分析原创 2024-05-28 21:33:21 · 154 阅读 · 0 评论 -
FreeRtos-03删除任务、栈溢出现象
volatile主要是防止变量被编译器过度优化。原创 2024-05-23 23:29:20 · 122 阅读 · 0 评论 -
FreeRtos-02动态静态创建任务
二、静态创建任务2.1静态创建任务代码函数原型三、动态创建任务与静态创建任务的区别 使用静态创建任务时,开发者需要指定空闲任务的栈大小和TCB大小;而使用动态创建任务时,FreeRTOS会自动管理这些内存分配。 在FreeRTOSConfig.h中增加定义 接着出现其他报错Undefined symbol vApplicationGetIdleTaskMemory (referred from tasks.o).原创 2024-05-23 15:48:18 · 240 阅读 · 0 评论 -
使用Source Insight对RTOS工程进行管理
在我们选中文件夹时:按住Ctrl就可以依次选中(在Ctrl all时,按住Ctrl点击就可以依次取消选中)原创 2024-05-23 09:11:42 · 106 阅读 · 0 评论 -
FreeRtos-01栈与堆
堆由程序员手动申请、手动释放;栈由程序分配,函数结束、自动释放。原创 2024-05-18 15:24:21 · 169 阅读 · 0 评论