实时操作系统(Real-time operating system, RTOS)又称即时操作系统
它会按照排序运行、管理系统资源,并为开发应用程序提供一致的基础。实时操作系统与一般的操作系统相比,最大的特色就是其“实时性”,也就是说,如果有一个任务需要执行,实时操作系统会马上(在较短时间内)执行该任务,不会有较长的延时。这种特性保证了各个任务的及时执行。
掌握RTOS背后的操作系统原理、学习RTOS的编程方式,更是为将来做准备。
开发平台:
KEIL μVision IDE 5.21
LinkIt SDK:
C:Keil_v5ARMPACKMediaTekMTx4.0.0
硬件:
用户 LED D11, D12, D13, D14, D15
D6 指示电源5V
D5 指示电源3.3V
D9 UART TX在传输数据
D10 UART RX在传输数据
D11 GPIO31
D12 GPIO35
D13 GPIO34
D14 GPIO33
D15 GPIO6 低电平有效
三个按钮
系统复位 S1
实时时钟(RTC)中断 S4
外部中断 S5
S5 用户可以将GPIO0配置为外部中断引脚。 按按钮从睡眠模式唤醒系统
XTAL(晶体振荡器)
40MHz源时钟支持,在空闲模式下具有低功耗。
用于RTC模式或外部32.768kHz模式的32.768kHz时钟。
软件:
RTOS:
使用KEIL uVision IDE编译指南:
http://labs.mediatek.com/site/znch/developer_tools/mediatek_linkit_rtos/get_started/7687_choose_env/7687_keil/get_sdk/
API接口说明:
http://home.labs.mediatek.com/media/apis/7687/index.html
RTOS代码的核心包含在三个文件中:tasks.c、queue.c、list.c这三个文件位于FreeRTOS/Source目录。在该目录下还包含三个可选的文件:timers.c、event_groups.c、croutine.c,分别实现软件定时、事件组和协程功能。
简单认识RTOS
创建任务
xTaskCreate() API 函数
函数原型portBASE_TYPE xTaskCreate(
pdTASK_CODE pvTaskCode,
const signed portCHAR * const pcName,
unsigned portSHORT usStackDepth,
void *pvParameters,
unsigned portBASE_TYPE uxPriority,
xTaskHandle *pxCreatedTask
);
任务函数
void ATaskFunction( void *pvParameters );
GPIO口功能说明:
第一个例子:HelloWorld
static void HelloWorldTask( void *pvParameters )
{
while (1) {
LOG_I(common, "Hello World!");
hal_gpt_delay_ms(1000);
}
}
//主函数中调用
xTaskCreate( HelloWorldTask, "HellWorldTask", 256, NULL, 3, NULL );
第二个例子:LED闪烁
硬件: D13 GPIO34
描述:1ms闪烁一次
//需添加下面2个头文件
#include "hal.h"
#include "hal_pinmux_define.h"
void LEDinit()
{
hal_gpio_status_t ret;
hal_pinmux_status_t ret_pinmux_status;
/*GPIO_init*/
ret = hal_gpio_init(HAL_GPIO_34);
if (HAL_GPIO_STATUS_OK != ret) {
log_hal_error("hal_gpio_init failedrn");
hal_gpio_deinit(HAL_GPIO_34);
return;
}
/* Set pin as GPIO mode.*/
ret_pinmux_status = hal_pinmux_set_function(HAL_GPIO_34, HAL_GPIO_34_GPIO34);
if (HAL_PINMUX_STATUS_OK != ret_pinmux_status) {
log_hal_error("hal_pinmux_set_function failedrn");
hal_gpio_deinit(HAL_GPIO_34);
return;
}
/* Set GPIO as output.*/
ret = hal_gpio_set_direction(HAL_GPIO_34, HAL_GPIO_DIRECTION_OUTPUT);
if (HAL_GPIO_STATUS_OK != ret) {
log_hal_error("hal_gpio_set_direction failedrn");
hal_gpio_deinit(HAL_GPIO_34);
return;
}
}
//任务
static void LEDTask(void *pvParameters )
{
LEDinit();
while(1)
{
hal_gpio_set_output(HAL_GPIO_34,1);
hal_gpt_delay_ms(1000);
hal_gpio_set_output(HAL_GPIO_34,0);
hal_gpt_delay_ms(1000);
}
}
//主函数
xTaskCreate( LEDTask, "LEDTask", 256, NULL, 3, NULL );
注意:下载时一定连接 脚位 J25 (Flash 模式) 以设置
开发板为 Flash Recovery 模式
移除脚位 J25 (Flash 模式) 的跳线器以设置开发板为 Flash Normal 模式
联发科实验地址:
https://github.com/MediaTek-Labs
资料:
Keil目录下:KeilMDKARMPACKMediaTekMTx4.0.0doc
1