FreeRTOS Queue 笔记
一创建消息队列通过下面代码可以看到使用消息队列需要用到的头文件和创建消息队列的函数原型。
1234#include “FreeRTOS.h”#include “queue.h”QueueHandle_t xQueueCreate( UBaseType_t uxQueueLength, UBaseType_t uxItemSize );
FreeRTOS 使用 vTaskList() 函数获取任务信息
使用 vTaskList()函数可以获取各个任务的信息保存到函数的参数中。
要使用 vTaskList() 函数需要先定义必要的宏定义为1,具体看一下代码:
1234567#if ( ( configUSE_TRACE_FACILITY == 1 ) && ( configUSE_STATS_FORMATTING_FUNCTIONS > 0 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) ) void vTaskList( char * pcWriteBuffer ) { TaskStatus_t * pxTaskStatusArray; UBaseType_t uxArraySize, x; char cStatus;
共需要定义3个宏定义:
configUSE_TRACE_FACILITY
configUSE_STATS_FORMATTING_FUNCTIONS
configSUPPORT_DYNAMIC_ALLOCATION
例 ...
FreeRTOS 判断任务状态
记录一段FreeRTOS程序,该程序演示了任务状态怎么判断。
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140/** * @file main.c * @author 信念D力量 * @brief * @version 0.1 * @date 2022-03-08 * * @copyright Copyright (c) 2022 * */#include "main.h"#includ ...
Rust VSCode 添加保存自动格式化
用 Visual Studio Code 开发 Rust用 VSCode 来开发 Rust 时可以配置好保存自动格式化,这样可以随时保持代码的整洁一致。
用到的插件:rust-analyzer、Rust 这两个插件,单独为 Rust 配置:
settings.json:
123456{ "[rust]": { "editor.defaultFormatter": "rust-lang.rust-analyzer", "editor.formatOnSave": true },}
FreeRTOS 任务通知
任务通知简介任务通知在FreeRTOS中是一个可选的功能,要使用任务通知的话就需要将宏 configUSR_TASK_NOTIFICATIONS定义为1。
FreeRTOS的每个任务都有一个32位的通知值,任务控制款中的成员变量ulNotifiedValue就是这个通知值。任务通知是一个事件,假如某个任务通知的接收任务因为等待任务通知而阻塞的话,向这个接收任务发送任务通知以后就会解除这个任务的阻塞状态。也可以更新接收任务的任务通知值,任务通知可以通过如下方法更新接收任务的通知值:
不覆盖接收任务的通知值(如果上次发送给接收任务的通知还没有被处理)。
覆盖接收任务的通知值。
更新接收任务通知值的一个或多个bit。
增加接收任务的通知值。
合理、灵活地使用上面这些更改任务通知值的方法可以在一些场合中替代队列、二值信号量、计数型信号量和时间标志组。使用任务通知来实现二值信号量功能的时候,解除任务阻塞的时间比直接使用二值信号量要快45%(FreeRTOS官方测试结果,使用v8.1.2版本中的二值信号量,GCC编译器,-O2优化条件下测试的,没有使能断言函数configASSERT()),并 ...
Rust 面向对象的小例子
小例子:main.rs
1234567891011121314151617181920212223mod test_mod { pub struct TestStruct { num: u32, } impl TestStruct { pub fn new() -> TestStruct { TestStruct { num: 0} } pub fn get_num(&self) -> u32 { self.num } pub fn set_num(&mut self, value: u32) { self.num = value} }}use test_mod::TestStruct;fn main() { let mut i = TestStruct::new(); println ...
Rust Trait 高级篇
关联类型 type
关联类型(associated types)是一个将类型占位符与 trait 相关联的方式,这样 trait 的方法签名中就可以使用这些占位符类型。trait 的实现者会针对特定的实现在这个类型的位置指定相应的具体类型。如此可以定义一个使用多种类型的 trait,直到实现此 trait 时都无需知道这些类型具体是什么。高级 trait
官方的一个例子:
12345pub trait Iterator { type Item; fn next(&mut self) -> Option<Self::Item>;}
完整代码:
12345678910111213141516171819202122232425262728293031323334353637383940414243struct Counter { count: u32,}// 实现一个关联函数:new()impl Counter { fn new() -> Counter { ...
Rust 不安全的代码
来看一个官方的例子:
12345678fn main() { let mut num = 5; // 定义一个可变的变量 let r1 = &num as *const i32; // 定义一个指向 num 的常量指针 let r2 = &mut num as *mut i32; // 定义一个指向 num 的可变指针 println!("r1 is: {}", *r1); // 打印 r1指向的值 println!("r2 is: {}", *r2); // 打印 r2指向的值}
该代码不能通过编译,因为我们在安全的代码中进行了裸指针的解引用。如果没有下面的两行 println打印则可以编译通过,如果要解引用裸指针,则需要定义一个 unsafe 块,代码如下:
1234567891011121314fn main() { let mut num = 5; // 定义一个可变的变量 let r1 = &num a ...
Android Log 调试输出
Android 中有个日志工具类 Log(import android.util.Log),这个类中提供了几个有用的打印日志的方法。
Log.v()
Log.d()
Log.i()
Log.w()
Log.e()
Log.v()用于打印哪些最为琐碎的,意义最小的日志信息。对应级别是verbose,是android日志里面级别最低的一种
Log.d()用于打印一些调试信息,这些信息对你的调试程序和分析问题是有帮助的。
对应级别是debug,比verbose高一级
Log.i()用于打印一些比较重要的数据,这些数据应该是你非常想看到的,可以帮助你分析用户行为数据。
对应级别info,比debug高一级
Log.w()用于打印一些比较重要的数据,这些数据应该是你非常想看到的,可以帮助你分析用户行为数据。
对应级别info,比debug高一级
Log.e()用于打印程序中错误的信息,比如程序进入到了catch语句中。当有错误信息打印出来的时候,一般都代表你的程序出现问题了,必须尽快修复
对应级别error,比warn高一级
其实很简单,一共就5个方法,当然每个方法还会有不同的重载,但那对你 ...
Android Studio 项目结构详解
Android Studio 为项目提供了几种不同的显示方式, 可以在下图选择不同的显示方式:
AndroidManifest.xml 应用清单AndroidManifest.xml 是应用程序的清单,该文件列出了 App 都有些什么内容。
123456789101112131415161718192021222324252627<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="com.zsf90.emptyactivity"> <application android:allowBackup="true" androi ...