原子操作(笔记)

定义:不可中断的一个或一系列操作。


实现:

         X86平台------------通过CPU提供了在指令执行期间对总线加锁的手段,CPU上有一根引线 HLOCK pin连接到北桥,如果汇编语言的程序中在一条指令前面加上前缀 “LOCK”, 经过汇编以后的机器代码就使CPU在执行这条指令的时候把 HLOCK pin的电位拉低,持续到指令结束时放开,从而把代码总线锁住,同一总线上别的CPU就暂时不能通过     总      线访问内存了,保证了指令在多处理器环境中的原子性。

          其他平台-----------通过关闭中断实现原子操作 | 通过CMPXCHG系列的指令来实现原子操作



         





正点原子提供了针对 FreeRTOS 的详细学习笔记和教程,这些资料通常包括对嵌入式实时操作系统 FreeRTOS 的核心概念、任务管理、调度机制、内存管理以及中断处理等内容的讲解。特别是对于初学者来说,这些教程通过结合 STM32 等嵌入式平台的实际操作,帮助理解如何在硬件上部署和使用 FreeRTOS。 FreeRTOSConfig.h 是 FreeRTOS 配置中的关键文件之一,其中定义了一系列以 "config" 和 "INCLUDE_" 开头的宏。这些宏用于配置系统的运行参数以及启用或禁用某些功能[^1]。例如: - `configUSE_PREEMPTION`:控制是否启用抢占式调度。 - `configUSE_IDLE_HOOK` 和 `configUSE_TICK_HOOK`:分别用来启用空闲钩子函数和时钟节拍钩子函数。 - `INCLUDE_vTaskPrioritySet` 和 `INCLUDE_vTaskDelete`:决定是否包含更改任务优先级和删除任务的功能。 此外,正点原子的教程还涵盖了具体的代码示例,比如如何创建任务、如何使用队列(Queue)进行任务间通信、信号量(Semaphore)与互斥量(Mutex)的应用等,这些都是 FreeRTOS 编程的重要部分。 ### 示例代码:创建两个简单的任务 以下是一个基于 FreeRTOS 创建两个任务的简单示例: ```c #include "FreeRTOS.h" #include "task.h" #include <stdio.h> // 任务1实现 void vTask1(void *pvParameters) { const char *pcTaskName = "Task 1 is running\r\n"; for (;;) { printf(pcTaskName); vTaskDelay(pdMS_TO_TICKS(1000)); // 延迟1秒 } } // 任务2实现 void vTask2(void *pvParameters) { const char *pcTaskName = "Task 2 is running\r\n"; for (;;) { printf(pcTaskName); vTaskDelay(pdMS_TO_TICKS(500)); // 延迟0.5秒 } } int main(void) { // 创建任务1 xTaskCreate(vTask1, "Task1", configMINIMAL_STACK_SIZE, NULL, 1, NULL); // 创建任务2 xTaskCreate(vTask2, "Task2", configMINIMAL_STACK_SIZE, NULL, 1, NULL); // 启动调度器 vTaskStartScheduler(); // 如果到达这里,说明内存不足无法启动调度器 for (;;); } ``` 这段代码演示了两个任务的创建过程,每个任务会周期性地打印消息到串口输出,并且展示了如何使用 `vTaskDelay()` 函数来实现任务延迟。 ### 学习资源获取 正点原子的 FreeRTOS 教程通常会随着其开发板一起提供,或者可以通过访问他们的官方网站和论坛获取相关的 PDF 文档、视频教程及配套源码。如果需要进一步了解 FreeRTOS 的高级特性,如内存分配策略、软件定时器(Timer)或事件组(Event Groups),建议查阅完整的正点原子 FreeRTOS 教程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值