摘要:
模板宏 例子,用于创建 get()、set() #define WELD_ATTACH_INFO_SETGET(T, FUN, VAR) \ inline T get##FUN() const { return VAR; } \ inline void set##FUN(T t) { VAR = t 阅读全文
摘要:
C++完全支持面向对象的程序设计,包括面向对象开发的四大特性: 封装: 是将数据和方法组合在一起,对外部隐藏实现细节,只公开对外提供的接口。这样可以提高安全性、可靠性和灵活性。 继承: 是从已有类中派生出新类,新类具有已有类的属性和方法,并且可以扩展或修改这些属性和方法。这样可以提高代码的复用性和可 阅读全文
摘要:
define和const关键字定义常量方式的异同 关于定义常量,"define"和"const"是两种不同的方式,它们有以下异同点: 定义方式: "define"是C语言中使用的预处理指令,使用宏定义来创建常量。例如:#define PI 3.14159 "const"是C语言中的关键字,在编译时进 阅读全文
摘要:
1、P22-25 2、P36、P165 call指令的作用: 将当前 CS:EIP 的值压入栈顶,CS:EIP 指向别调用的函数的入口地址。 ret指令的作用: 从栈顶弹出原来保存在这里的 CS:EIP 的值,放入 CS:EIP 中。 进程切换时用什么函数 schedule() _switch_to 阅读全文
摘要:
基于FreeRTOS的智能家居系统 (1)基于STM32硬件平台搭建控制系统,使用USART/IIC等通信协议实现模块间通信。 (2)包括语音模块、WIFI模块、温湿度传感器、电机等。 (3)移植FreeRTOS实现多任务调度,支持语音控制、APP控制。 步进电机是通过脉冲信号来进行控制,每输入一个 阅读全文
摘要:
Strlen 和sizeof读取同一个字符串,结果分别是多少? Strlen 和 sizeof 是两个不同的函数,它们的行为不同,用于读取同一个字符串的结果也不同。 Strlen 是 C 语言中的一个函数,它用于计算字符串的长度,不包括末尾的空字符('\0')。 char str[] = "Hell 阅读全文
摘要:
事件位: 事件位用来表明某个事件是否发生,事件位通常用作事件标志,比如: ● 当收到一条消息并且把这条消息处理掉以后就可以将某个位(标志)置 1,当队列中没有消息需要处理的时候就可以将这个位(标志)置 0。 ● 当把队列中的消息通过网络发送输出以后就可以将某个位(标志)置 1,当没有数据需要从网络发 阅读全文
摘要:
二值信号量 二值信号量通常用于互斥访问或同步,二值信号量和互斥信号量非常类似,但是还是有一些细微的差别,互斥信号量拥有优先级继承机制,二值信号量没有优先级继承。 和队列一样,信号量 API 函数允许设置一个阻塞时间,阻塞时间是当任务获取信号量的时候由于信号量无效从而导致任务进入阻塞态的最大时钟节拍数 阅读全文
摘要:
使用动态内存管理的时候 FreeRTOS 内核在创建任务、队列、信号量的时候会动态的申请RAM。标准 C 库中的 malloc()和 free()也可以实现动态内存管理,但是如下原因限制了其使用: ● 在小型的嵌入式系统中效率不高。● 会占用很多的代码空间。● 它们不是线程安全的。● 具有不确定性, 阅读全文
摘要:
使用RTOS时,一个实时任务可以作为一个独立的任务,任何一个时间点只有一个任务运行,具体由RTOS调度器决定。 RTOS调度器的职责是确保当一个任务开始执行的时候上下文环境与上一次推出的时候相同,每个任务都有堆栈,任务切换的时候将上下文保存在堆栈中。 任务特性: 1、简单 2、没有使用限制 3、支持 阅读全文