图 1-23 RTOS 下 的 main.c
1.3.3 main.c 代码
/*----------------------------Begin-------------------------------*/
#include "LPC17xx.h" // Device header
#include "RTE_Components.h" // Component selection
#include "RTE_Device.h" // Keil:
evice:Startup
#include <rtthread.h>
static struct rt_thread led0_thread;
static struct rt_thread save_thread; ALIGN(RT_ALIGN_SIZE)
static rt_uint8_t rt_led0_thread_stack[1024];
static rt_uint8_t rt_save_thread_stack[1024];
static void led0_thread_entry(void* parameter)
{
uint8_t i = 0; while(1)
{
i++;
rt_thread_delay(50); //
}
}
static void save_thread_entry(void* parameter)
{
uint8_t j = 0;
{
j++;
rt_thread_delay(10); //
}
}
while(1)
int main(void)
{
rt_err_t result = RT_ERROR;
result = rt_thread_init(&led0_thread, "led0", //
led0_thread_entry, RT_NULL, //
&rt_led0_thread_stack[0], //
sizeof(rt_led0_thread_stack), //
5, //
20); //
if (result == RT_EOK)
{
rt_thread_startup(&led0_thread);
}
result = RT_ERROR;
result = rt_thread_init(&save_thread, "save",
save_thread_entry,
RT_NULL, //
&rt_save_thread_stack[0], //
sizeof(rt_save_thread_stack), //
4, //
20);
if (result == RT_EOK)
{
rt_thread_startup(&save_thread);
}
return 0;
}
/*-----------------------------END----------------------------------*/
1.3.4 编译与仿真
添加两个断点,可以看到两个任务来回切换,并明显看到 save 这个任务先执行,说明优先级越小,优先级越高。
图 1-24 RT-Thread 模拟运行
1.4、说好的点个灯呢?
RT-Thread 好像有个叫 PIN 什么的,对于引脚控制,代码越多效率越低,直接写寄存器的效率是比较高的, 但是对人的要求也比较高,调用库文件中的函数效率也不会差到哪去,通常我们都会使用现成的参考代码
(没有?上网找去!MDK 里面也有很多例子,打开看去!)。
1.4.1 添加一个 GPIO 控制函数
图 1-25 点个灯
1.4.2 仿真
图 1-26 仿 真
1.4.3 那个监视窗口在哪里?
图 1-27 GPIO 口状态查看
下一章预告:
第二章 Finsh Shell
欢迎进群交流讨论
欢迎大家进群交流讨论