实验5-8知识点
实验5:时间片调度/任务信息状态查询与统计
实验6:信号量
实验7:软件定时器/事件标志组
实验8:任务通知
回答下列问题时,尽量通过读代码得到答案,这有助于你理解和记住代码。
1.《11-1 FreeRTOS任务状态或信息查询实验》
本实验同时用到了TIM3和TIM5。
TIM5可以换成TIM4。
但是,如果我们想把这一实验和以前的实验合并成一个工程时,TIM3/TIM4和实验6-1中断测试实验冲突,这个该如何解决?给出思路即可。
??
uxTaskGetNumberOfTasks函数的作用和用法?
P156获取当前系统中存在的任务的个数
uxTaskGetSystemState函数的作用和用法?
P151获取系统中任务状态
uxTaskGetSystemState中的TaskStatus_t结构体的成员变量有哪些?
作业20180521/1:
typedef struct xTASK_STATUS
{
TaskHandle_t xHandle; //任务句柄
const char *pcTaskName; //任务名字
UBaseType_t xTaskNumber; //任务编号
eTaskState eCurrentState; //当前任务状态
UBaseType_tuxCurrentPriority; //任务当前优先级
UBaseType_t uxBasePriority; //任务基础优先级
uint32_t ulRunTimeCounter; //任务运行的总时间
StackType_t *pxStackBase; //堆栈基地址
uint16_tusStackHighWaterMark; //从任务创建以来任务堆栈剩余的最小大小
} TaskStatus_t;
xTaskGetHandle函数的作用和用法?
P154根据任务名字查找某个任务的句柄
vTaskGetInfo函数的作用和用法?
P152获取某个任务信息
eTaskGetState函数的作用和用法?
P154获取某个任务的状态(eTaskState类型)
pvPortMalloc函数的作用和用法?
P161内存申请函数
vPortFree函数的作用和用法?
P161内存释放函数
memset函数的作用和用法?
P162内存设置函数
2.《FreeRTOS实验11-2 FreeRTOS任务运行时间统计实验》
统计任务运行时间功能的问题:
(1)使用统计功能需要开放哪几个宏?
P164一共要开放3个宏
(2)配置统计时钟基准的函数是什么?其内容是什么?
P165其实就是初始化定时器
(3)要能够正常统计,统计时间基准和OS时间节拍的关系是什么?
P165时钟基准的精度要比系统时钟高10-20倍
(4)tasks.c中的哪个函数中计算了每个任务的运行时间?
P169vTaskGetRunTimeStats()
调试的问题:
在软件仿真状态下,当设置一个管脚为上拉输入时,它的初始值是什么?
设置完GPIO状态为上拉输入时,发现ODR里对应值为1,而PIN和IDR里为0。
3.《FreeRTOS实验13-1 FreeRTOS队列操作实验》
uxQueueSpacesAvailable函数的作用和用法
13-1main.c&queue.c用于求队列剩余大小
uxQueueMessagesWaiting函数的作用和用法
13-1main.c&queue.c用于求当前已使用队列大小
xQueueCreate函数的作用和用法
P189队列创建函数,本质上是一个宏,用来动态创建队列,最终会调用xQueueGenericCreate ()
my_mem_init函数的作用
P213初始化内部内存池
mymalloc函数的作用和用法
P212申请内存
myfree函数的作用和用法
P212释放内存
xQueueSend函数的作用和用法
P196用于向队列中发送消息,本质上是一个宏,后向入队,新消息插入到队列后面,最终会调用xQueueGenericSend(),只能用于任务函数中
xQueueReceiveFromISR函数的作用和用法
P209用于在中断服务函数中从队列读取一条信息,读取成功后会将队列中这条数据删除
定时器的定时中断周期与自动重装值、预分频数、定时器时钟源之间的计算公式是什么?
中断周期(s)=[(自动重装载值+1)×(预分频数+1) ]/定时器时钟源(MHz)
*补充:已知中断周期和定时器时钟源频率,假定预分频数,求自动重装值。
例:已知时钟源频率72MHz,中断周期1.75s,假定时钟源2000分频,预分频数即为1999,分频后的时钟频率为72MHz/(1999+1)=36000Hz,
则装载值=1.75/(1/36000)=63000。
重装载值越大,误差越小。
这一实验中的内存动态分配方式与13-1中的不同,差别体现在哪里?
??
4.《FreeRTOS实验14-1 FreeRTOS二值信号量实验》
什么是二值信号量?
P220
如何创建一个二值信号量?
P222
信号量的P操作和V操作分别体现在哪两个函数中?
如何释放一个信号量?
P224
任务中如何取一个信号量?当取不到时会如何?
P226
STM32F103的USART1的发送和接收引脚分别是哪一个?
文字或流程图描述DataProcess_task函数的作用和流程。
P230-P231答:指令处理任务,根据接收到的指令来控制不同的外设
文字或流程图描述USART1_IRQHandler函数的作用和流程。
P232答:作用:释放二值信号量
变量USART_RX_STA的作用是什么?
P232中最后一个if有调用答:获取接收到的数据
5.《FreeRTOS实验14-2 FreeRTOS计数型信号量实验》
什么是计数型信号量?
P234答:长度大于1的队列
如何创建一个计数型信号量?
P234分为静态和动态创建
如何获取一个计数型信号量的当前计数值?
P226获取信号量
6.《FreeRTOS实验14-3 FreeRTOS优先级翻转实验》
举例说明什么是优先级反转。
P241优先级翻转概念及例子
分析是否发生了优先级反转。
??
什么是优先级继承?
在优先级翻转实验代码的基础上设计一个信号量互锁。
先建立两个信号量S1和S2,high_task获取S1后,只有在获取到S2后才释放S1。
相反,low_task 获取S2后,只有在获取到S1后才释放S2。
设计程序实现一个信号量互锁的现象,分析互锁出现的条件。
??
7.《FreeRTOS实验14-4 FreeRTOS互斥信号量操作实验》
什么是互斥信号量?它与二值信号量的区别是什么?
P248
如何创建一个互斥信号量?
P248
允许使用互斥信号量的宏是哪一个?
configUSE_MUTEXES == 1
比较14-3反转实验和14-4互斥实验的main中的代码差别,以及实验结果的差别。
差别:14-4的第60-61,102-103,146,150,182,188行与14-3不同。
8.FreeRTOS实验15-1 FreeRTOS软件定时器实验
什么是软件定时器?
P268
软件定时器和硬件定时器的主要区别是什么?
在硬件定时器中,我们是在定时器中断中实现需要的功能,而使用软件定时器时,我们是在创建软件定时器时指定软件定时器的回调函数,在回调函数中实现相应的功能。
xTimerCreate函数的作用和用法?
P272 函数原型+参数解释
变量uxAutoReload的true和false会对定时器带来什么影响?
当参数为pdture时,创建的是周期定时器(P270);当参数为pdfalse时,创建的是单次定时器(P270)
如何启动和停止软件定时器?
P274
定时器1和定时器2的输出有什么规律?
P270
定时器1和2的回调(callback)函数的核心内容是什么?
P279
9.FreeRTOS实验16-1 FreeRTOS事件标志组实验
什么是事件标志组?
P281
如何创建一个事件标志组?
P282
如何定义事件位?
P283
xEventGroupSetBits函数的作用和用法
P284
xEventGroupWaitBits函数的作用和用法
P286
xEventGroupGetBits函数的作用和用法
P285
10.《FreeRTOS实验17-1 FreeRTOS任务通知模拟二值信号量实验》
本实验中的xTaskNotify的作用对应了14-1实验中的哪一个函数?
P239倒数第二段P306相当于xSemaphoreGive()
用于发送任务通知,与xTaskNotifyGive()函数作用相同
xTaskWait对应了14-1实验中的哪一个函数?
??
使用任务通知会有什么优势?
P306时间快/所需的RAM少
如何设计一个实验比较任务通知和二值信号量的性能差异???。