FreeRTOS学习记录第一天
一、
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53int main(void)
{
/*主控及相关外设初始化*/
BspInit ();
/* 创建任务 */
AppTaskCreate();
/* 启动调度,开始执行任务 */
vTaskStartScheduler();
/* 如果一切正常, main()函数不应该会执行到这里。但如果执行到这里,很可能是内存堆空间不足导致空闲
任务无法创建。第五章有讲述更多关于内存管理方面的信息 */
for( ;; );
}
static void vTaskTest1(void *pvParameters)
{
volatile unsigned long u1;
for(;;)
{
printf("Test 1\r\n");
for(u1=0;u1<1000000;u1++)
{
}
}
}
static void vTaskTest2(void *pvParameters)
{
volatile unsigned long u1;
for(;;)
{
printf("Test 2\r\n");
for(u1=0;u1<1000000;u1++)
{
}
}
}
static void AppTaskCreate (void)
{
/*测试任务*/
xTaskCreate( vTaskTest1, "vTaskTest1", 512, NULL, 1, NULL );
xTaskCreate( vTaskTest2, "vTaskTest2", 512, NULL, 1, NULL );
}
串口输出:
分析:
两个任务的优先级相同,因为我们开启了调度器,调度器会让任务轮流执行一个“时间片”;
如果其中一个优先级高,将一直执行优先级高的任务,优先级低的任务也就被“饿死”了,CPU在任何时刻永远执行当前优先级最高的任务;
二、
仅更改任务的优先级:
1
2
3
4
5
6