FreeRTOS
FreeRTOS线程管理TCB线程控制块是操作系统用于管理线程的一个数据结构,它会存放线程的一些信息,例如优先级、线程名称、线程状态等,也包含线程与线程之间连接用的链表结构,线程等待事件集合等,详细定义如下 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253typedef struct tskTaskControlBlock{ // 1. 栈指针 - 最重要的成员之一 // 当任务被切换时,它的当前上下文(寄存器值)就保存在这个栈顶。 volatile StackType_t * pxTopOfStack; // 2. 任务状态链表项 // 用于将TCB插入到不同的状态列表中(如就绪列表、阻塞列表、挂起列表)。 ListItem_t xStateListItem; // 3. 事件链表项 // 用于将TCB插入到事件列表(如队列、信号量)中,当任务因等待事件而阻塞时使用。 ...
08 STM32
STM32系统架构STM32F4系列的系统架构如图所示(来自User Manual): 可以看到内核通过3条总线连接到AHB(Advanced High-performance Bus)总线矩阵,然后与高速外设(DMA、MAC、USB…)、Flash、SRAM低速外设(通过APB总线桥接)连接 Data Sheet里面也有个比较好的架构图: ARM Cortex-M系列的CPU都包含以下3条总线: I-Bus:指令总线,负责在 0x0000_0000 – 0x1FFF_FFFF 之间的取指操作,访问的存储器对象是Flash D-Bus:数据总线,负责在 0x0000_0000 – 0x1FFF_FFFF 之间的数据访问操作,访问的存储器对象是Flash S-Bus:系统总线,负责在 0x2000_0000 – 0xDFFF_FFFF 和 0xE010_0000 – 0xFFFF_FFFF 之间的所有数据传送,取指和数据访问都算上,访问对象是SRAM和外设寄存器 不同内核实际上各个总线能访问的地址范围不一样 参考: Cortex-M3权威指南第六章 STM32...
面试题
14.FreeRTOS支持哪些类型的中断?中断处理的基本原则是什么?21.FreeRTOS如何处理异常和错误? 24.如何在FreeRTOS中实现低功耗模式?25.FreeRTOS的移植过程通常需要考虑哪些硬件特性? 29.FreeRTOS如何与其他操作系统进行集成?30.FreeRTOS的调试工具和方法有哪些?
Keil的Debug技巧
Debug 技巧1.Debug时,黄色箭头代表程序运行到哪里了,蓝色箭头是鼠标移动的位置 2.可以通过看Systick的值来计算语句运行的时间 3.从Watch Window可以设置在某变量发生变化时设置断点 4.单步调试【单步调试】也就是每点⼀次按钮,程序运⾏⼀步。遇到函数会进⼊函数。点击图标按钮,或者按快捷键F11。(这⾥取消上⾯的断点) 5.逐步调试【逐步调试】即逐⾏调试,也就是每点⼀次按钮,程序运⾏⼀⾏。遇到函数不会进⼊函数。点击图标按钮,或者按快捷键F10。 6.跳出调试【跳出调试】即挑出函数调试,也就是每点⼀次按钮,程序跳出⼀个函数,直到跳出最外⾯的函数(main函数)。点击图标按钮,或者按快捷键Ctrl + F11。 7.运⾏到光标处【运⾏到光标处】即将光标放在某⼀处,点击该按钮(或Ctrl +...
SPI
SPI学习1.SPI的物理结构 MOSI:主设备输出,从设备输入 MISO:主设备输入,从设备输出 SCK:时钟信号线 CS:设备片选,低电平表示被选择 一个SPI接口可以同时连接多组从设备,只需要增加CS线即可 用CUBEMX设置SPI默认只有3个引脚(没有CS),如果下面开启了NSS,系统会自动给你指定一个CS引脚,否则就要自己指定CS引脚 在通信开始/结束时,手动控制CS引脚的电平 2.SPI工作原理主机和从机内部都有一个移位寄存器,主机发送数据时,同时也会受到一组数据,不过不需要对该数据处理。主机接收数据时,要给从机发送一组没有意义的数据,同时接收数据。 3.寄存器相关的寄存器有2组 CPOL(时钟极性寄存器):控制高电平还是低电平时空闲状态 CPHA(相位控制寄存器):控制是奇数还是偶数跳变是读取数据 这个怎么选一般要看芯片手册 4.SPI的其他参数
样式
样式 样式是一个 lv_style_t 变量,它可以保存边框宽度、文本颜色等对象的属性尽管可以用简单的方法Lv_set_xxx()直接修改对象的属性,但是用过样式来该的话可以比较方便的修改更多对象的样式。 可以将样式分配给对象以更改其外观。在赋值过程中,可以指定目标部分(和目标状态 LVGL对象包括如下状态且可以通过|来组合 数字代表了这种状态的优先级,最后选择优先级最高的来显示 1.初始化样式和设置/获取属性样式存储在 lv_style_t 变量中。样式变量应该是 static 、全局或动态分配的。 换句话说,它们不能是函数中的局部变量,当函数结束时它们会被销毁。 在使用样式之前,它应该用 lv_style_init(&my_style) 进行初始化。 初始化后,可以设置或添加样式属性。lv_style_set_<property_name>(&style, <value>); 1234static lv_style_t...
位置
对象的大小和位置1.对象的显示模型一个对象的所有像素包括以下4部分: 边界(bounding)框:元素的宽度/高度围起来的区域。 边框(border)宽度:边框的宽度。 填充(padding):对象两侧与其子对象之间的空间。 内容(content):如果边界框按边框宽度和填充的大小缩小,则显示其大小的内容区域。 2.改变对象位置的方式(1)直接方式 123lv_obj_set_x(obj, 10);lv_obj_set_y(obj, 20);lv_obj_set_pos(obj, 10, 20); //Or in one function (2)百分比 lv_obj_set_x(btn, lv_pct(10)); //x = 10 % of parant content area width (3)设置对齐 123456//与父对象对齐void lv_obj_align(struct _lv_obj_t * obj, lv_align_t align, lv_coord_t x_ofs,...
(三)定时器
(三)定时器一、MSP430单片机的定时器概述MSP430共有4个16位定时器,主要包括定时器A的0、1、2以及定时器B,每个定时器输出通道个数不同。 时钟源包括ACLK、SMCLK和TACLK 二、定时器的工作模式定时器主要包括4个工作模式: ① 停止模式。 停止模式用于定时器暂停,并不发生复位,所有寄存器现行的内容在停止模式结束后都可用。当定时器暂停后重新计数时,计数器将从暂停时的值开始以暂停前的计数方向计数。例如,停止模式前,Timer_A定时器工作于增/减计数模式并且处于下降计数方向,停止模式后,Timer_A仍然工作于增/减计数模式下,从暂停前的状态开始继续沿着下降方向开始计数。若不想这样,则可通过TAxCTL中的TACLR控制位来清除定时器的计数及方向记忆特性。 ②...
(二)外部中断
(二)外部中断1.中断概述MSP430单片机的中断优先级是固定的,由硬件确定,用户不能更改。当多个中断同时发生中断请求时,CPU按照中断优先级的高低顺序依次响应。MSP430单片机包含3类中断源:系统复位中断源、不可屏蔽中断源和可屏蔽中断源。 可屏蔽中断源是具有中断功能的片上外设所产生的。由状态寄存器SR的GIE位控制,当GIE=0时,所有中断使能。当GIE=1时,所有中断使能 以下是MSP430所有中断 在使用外部中断时,由于其是可屏蔽中断,所以必须要置位GIE 可以通过 123_EINT();//开启_DINT();//关闭 或者 12__bis_SR_register(GIE);//开启__bic_SR_register(GIE);//关闭 开启或关闭。 2.中断写法1234567891011121314151617#pragma vector = PORT2_VECTOR // P2口中断源__interrupt void Port_2 (void) // 声明一个中断服务程序,名为Port_2(){ ...
内存的分区
内存的分区及存放位置一、内存分区介绍程序中内存有以下分区: 栈区(stack) 临时创建的局部变量存放在栈区。 函数调用时,其入口参数存放在栈区。 函数返回时,其返回值存放在栈区。 const定义的局部变量存放在栈区。 堆区(heap)堆区用于存放程序运行中被动态分布的内存段,可增可减。 可以有malloc等函数实现动态分布内存。 有malloc函数分布的内存,必须用free进行内存释放,否则会造成内存泄漏。 全局区(静态区)(static)内存在程序编译的时候就已经分配好了,这块内存在程序的整个运行期间都存在。它主要存放静态数据(局部static变量,全局static变量)、全局变量。当程序结束后,变量由系统释放 。 常量区存放数字 和 常量字符串。当程序结束后,由系统释放 。 常量区的内容不可以被修改。 代码区存放函数体的二进制代码。 123456789101112131415161718192021222324//main.cpp#include <iostream>using namespace std;#include...







