FreeRTOS 延时函数
vTaskDelay()任务延时函数,把当前任务从运行态(就绪列表),移到延时列表。 参数: xTicksToDelay > 延时的时间长度,单位是系统时钟节拍周期。 如果调用vTaskDelay()函数的任务在执行过程中被更高优先级的任务或者中断所打断,那么调用vTaskDelay()函数的任务将会受到影响,此时将不能保持一个固定的时间间隔运行。 使用例子12vTaskDelay(500/portTICK_PERIOD_MS);vTaskDelay(200); 函数定义12345678910111213141516171819202122232425262728293031323334353637383940414243#if ( INCLUDE_vTaskDelay == 1 ) void vTaskDelay( const TickType_t xTicksToDelay ) { BaseType_t xAlreadyYielded = pdFALSE; /* A delay time of zero just...
FreeRTOS 任务挂起与任务恢复
FreeRTOS 的任务有几种状态,并且这几种状态可以相互转换,下面是转换图: 任务的4个状态: 运行态 就绪态,指准备好了,可以随时运行 阻塞态 挂起态 运行态当任务实际执行时,它被称为处于运行状态。 任务当前正在使用处理器。 如果运行 RTOS 的处理器只有一个内核, 那么在任何给定时间内都只能有一个任务处于运行状态。 就绪态准备就绪任务指那些能够执行(它们不处于阻塞或挂起状态), 但目前没有执行的任务, 因为同等或更高优先级的不同任务已经处于运行状态。 阻塞态如果任务当前正在等待时间或外部事件,则该任务被认为处于阻塞状态。 例如,如果一个任务调用vTaskDelay(),它将被阻塞(被置于阻塞状态), 直到延迟结束-一个时间事件。 任务也可以通过阻塞来等待队列、信号量、事件组、通知或信号量 事件。 处于阻塞状态的任务通常有一个”超时”期, 超时后任务将被超时,并被解除阻塞, 即使该任务所等待的事件没有发生。 阻塞状态下的任务不使用任何处理时间,不能 被选择进入运行状态。 挂起态 Blocked与阻塞状态下的任务一样, 挂起状态下的任务不能...
FreeRTOS 创建任务
1234567891011121314151617#include "FreeRTOS.h"#include "task.h"#define USER_LED_TASK_PRIO 2 /* 定义任务优先级,数字越大优先级越高 */#define USER_LED_TASK_STACK_SIZE 120 /* 定义任务堆栈大小,单位为:字 */TaskHandle_t user_led_handle; /* 定义任务句柄 */void xtp_create_task(void){ xTaskCreate( (TaskFunction_t)led_task, (const char *)"led_task", (uint16_t)USER_LED_TASK_STACK_SIZE, (void *)NULL, (UBaseType_t)USER_LED_TASK_PRIO, ...
Rust 笔记之错误处理
12345678910111213141516171819202122fn result_test(i: i32) -> Result<&'static str, &'static str> { if i > 0 { Err("Error") } else { Ok("ok") }}fn main() { println!("Hello, world!"); let a = result_test(-1); assert_eq!(a.is_ok(), true); match a { Ok(v) => {println!("v: {v}")}, Err(e) => {println!("e:...
Rust 笔记之常量与变量
Rust 中变量和常量的概念,变量分为可变变量和不可变变量,常量用 const 定义。 1234567891011121314151617181920212223fn main() { println!("/////////////////////////////////////////"); println!("==============Hello, world!=============="); println!("/////////////////////////////////////////"); let x = 5; // x 不可变,自动类型推导为 i32 let y: f64 = 12.325; // y 不可变,显式指定类型为 f64, 带小数点的默认自动为 f64 let mut z: f64; // z 可变,值可变,在定义时不给初始化则必须指定变量的类型 println!("x: {x}"); ...
Rust 简单输入输出以及读取文件 - 例子代码
在这里分享一个我写的 Rust 例子,用到了输入输出和文件读取。 123456789101112131415161718192021222324252627/// # 学习 Rust 中的标准输入/// 首先我们要导入 stdin/// `use std::io::stdin`use std::io::{self, stdin};use std::io::prelude::*;use std::fs::File;fn main() -> io::Result<()> { println!("请输入一些内容个 hello 变量:"); let mut hello = String::new(); stdin().read_line(&mut hello)?; // 程序运行到这里会停住等你输入文字 // 打印 hello 变量 println!("variable hello>>>: {hello}"); //...
C语言字符串处理相关笔记
gets()函数原型: 1char * gets (char *__str); 功能:从标准输入读入字符,并保存到__str指定的内存空间,直到出现换行符或读到文件结尾为止。 参数:s 字符串首地址。返回值: 成功:读入的字符串。 失败:NULL 例子: 1234567void string_test(void){ char s[100]; if (gets(s) != NULL) { printf("%s\n", s); }} 调用该函数会提示警告是危险的函数,可以使用 fgets()。 1call to 'gets' declared with attribute warning: Using gets() is always unsafe - use fgets() fgets()头文件:#include<stdio.h> 函数原型: 1char * fgets (char *__restrict__ __s, int __n,...
C语言宏笔记详情
宏是C语言中的基石,写 c 程序就必定会用的宏,所有学习宏也是必不可少的。 宏的分类(使用方式): 简单的宏定义(只有宏名):#define DEBUG 简单替换:#define PI 3.1415926 带参数的宏: #define ADD(x,y) ((x) + (y)) // 加法运算 #define SQRT(x) ((x) * (x)) // 平方运算 do {} while(0) 语法在 C 语言 中,使用 do…while 结构来定义宏时,通常是为了确保宏定义中的代码块在使用时可以像一个独立的语句一样被执行。do…while 结构的基本语法如下: 1234#define MACRO_NAME (arguments...)do { /* 宏定义 */} while (0) 1234567891011#include <stdio.h>// 定义一个简单的宏#define PRIVATE_MESSAGE(msg) do {\ ...
C语言动态数组的实现
12345678910struct Dyn_arry_t{ int* array; int capacity; int size;};void dyn_array_test(void);struct Dyn_arry_t dyn_array_init(int* array, int size); 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081#include "dyn_array.h"#include <stdio.h>#include <stdlib.h>#include <string.h>#include "utils.h"/** * @brief 初始化动态数组 * @param array :要初始化的数组 *...
C语言中打印整型数组的函数实现
在这里分享出自己写的,用于打印整型数组的C函数,把函数写到了 utils 文件中,以后可以往里边写一下其他的工具函数。 utils.h12345678910#ifndef _UTILS_H#define _UTILS_H#include <stdio.h>#define Line(message) printf("-------------------- %s --------------------\n", message)void print_array_int(int* arr, int size);#endif /* _UTILS_H */ utils.c12345678910111213141516171819#include "utils.h"#include <stdio.h>void print_array_int(int* arr, int size){ for(int i = 0; i < size; i++) { if (i ==...