- 博客(10)
- 收藏
- 关注
原创 Cortex-M3学习笔记(持续更新)
Cortex-M3 是一个 32 位处理器内核。内部的数据路径是 32 位的,寄存器是 32 位的,存储器接口也是 32 位的。CM3 采用了哈佛结构,拥有独立的指令总线和数据总线,可以让取指与数据访问并行不悖。这样一来数据访问不再占用指令总线,从而提升了性能。为实现这个特性, CM3 内部含有好几条总线接口,每条都为自己的应用场合优化过,并且它们可以并行工作。但是另一方面,指令总线和数据总线共享同一个存储器空间(一个统一的存储器系统)。换句话说,不是因为有两条总线,可寻址空间就变成 8GB 了。
2024-03-16 22:09:47
1196
2
原创 八、FreeRTOS临界段代码保护及任务调度器挂起与恢复
临界段:临界段代码也叫临界区,指那些必须完整运行,不能被打断的代码段什么场合需要用到临界段?1.外设:需要严格按照时序初始化的外设:IIC、SPI等2.系统:系统自身需求3.用户:自身需求除了中断还有什么可以打断当前程序运行?任务调度(pendsv):如果处于低优先级,则可能会出现被抢占情况FreeRTOS在进入临界段代码时需要关闭中断,直到处理完临界段代码才能再打开函数描述任务级进入临界段任务级退出临界段中断级进入临界段中断级退出临界段。
2024-03-02 17:48:34
491
原创 六、任务挂起和恢复函数介绍
恢复被挂起的任务在中断中恢复被挂起的任务挂起:挂起任务类似暂停,可恢复; 删除任务,无法恢复。恢复:恢复被挂起的任务。“FromISR”:带FromISR后缀是在中断函数中专用的API函数。 任务挂起函数介绍:void vTaskSuspend(TaskHandle_t xTaskToSuspend)待挂起任务的任务句柄无论优先级如何,被挂起的任务都将不再被执行,直到任务被恢复(调用恢复函数) 。此函数用于挂起任务,使用时需将宏 INCLUDE_vTaskSuspend 配置为 1(config.h)。注
2024-02-27 19:04:27
1749
原创 五、FreeRTOS任务的创建和删除
任务创建和删除的本质就是调用FreeRTOS的API函数动态创建任务:任务的任务控制块以及任务的栈空间所需内存,均由FreeRTOS从FreeRTOS管理的堆中分配静态创建任务:任务的任务控制块以及任务的栈空间所需内存,需要用户分配提供其中如何设置堆栈大小(#define START_TASK_STACK_SIZE )可以使用API函数 :INCLUDE_uxTaskGetStackHighWaterMark——获取任务堆栈历史剩余最小值来确定。
2024-02-22 23:57:07
842
1
原创 四、FreeRTOS移植
portable:包含了FreeRtos的移植文件。RVDS:不同内核芯片的移植文件夹。stream_buffer.c:流式缓冲区相关文件。include:内包含了FreeRtos的头文件。Keil:指向RVDS文件夹。event_groups.c:事件相关文件。timers.c:软件定时器相关文件。croutine.c:协程相关文件。queue.c:队列相关文件。Test:公司以及移植层测试代码。list.c:列表相关文件。task.c:任务相关文件。License:相关许可。
2024-02-08 14:14:48
342
原创 三、FreeRTOS基础知识
主要针对优先级不同的任务,创建每一个任务都会分配一个优先级,优先级高的抢占优先级低的任务,被抢占的任务保持就绪状态。如果优先级高的任务阻塞了(系统延时或等待信号量等),此时就绪态中,次优先级高的任务执行,如果阻塞结束,优先级高的继续抢占次优先级任务运行。主要针对优先级相同的任务,当多个任务优先级相同时,任务调度器会在每次系统时钟节拍到的时候切换任务,也就是,同等优先级任务轮流的享有相同的CPU时间(可设置)——时间片,在FreeRtos中,一个时间片等于SysTick中断周期。1.仅就绪态可转变成运行态。
2024-02-08 08:00:00
376
原创 二、FreeRTOS简介
4.优先级不限,任务优先级分配没有限制,多任务可同一优先级。如STM32为32位,则优先级限制在32(0~31),数值越大任务优先级越高,与中断相反。6.抢占/协程/时间片:支持抢占式,协程式,时间片流转任务调度。FreeRtos是一个免费的嵌入式实时操作系统,其特点有。5.任务不限:可创建的实时任务数量没有软件限制。1.免费开源:商业产品中使用,无潜在商业风险。2.核心代码9000多行包含在3个.c中。一、FreeRtos简介。3.简单易用,可移植性好。
2024-02-07 23:35:59
374
原创 一、RTOS入门
低优先级任务可被高优先级打断,每个任务都是一个无限循环,优先级高的嵌套在优先级低的里,每个任务都是独立且互不影响的。如果高优先级任务一直运行,则次优先级一直等待,除非在高优先级中加入延时,才能运行低优先级任务。4.任务堆栈:每个任务都有自己的栈空间,保存被打断的低优先级任务寄存器中的值、局部变量等 ,执行完高优先级任务后将值恢复到寄存器里,然后从断点继续执行下去。2.延时函数:任务调度,让出CPU给优先级高的程序先执行,执行完成后调度给次高优先级的任务执行。3.抢占式:高优先级任务抢占低优先级任务的执行。
2024-02-06 19:08:21
405
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人