# RTX-Tiny的介绍
RTX-Tiny是基于嵌入式操作系统RTX5的微型实时内核,因此其占用的RAM大小也比较小。
根据Keil官方网站的介绍,RTX-Tiny占用的RAM大小仅为600字节左右。这个大小是指RTX-Tiny内核本身占用的RAM大小,不包括用户应用程序等占用的RAM。
然而,实际上RTX-Tiny占用的RAM大小可能因具体的应用场景而不同。例如,在使用RTX-Tiny的应用程序中,如果涉及到动态内存分配、任务堆栈、消息队列等操作,这些都会占用额外的RAM。因此,在具体应用中,需要根据实际需求评估和优化RAM的使用,以达到最佳的性能和资源利用效果。
# 单片机资源对比
# 创建2个单独线程,分别输出hello1和hello2,第二个优先级高
由于STC89C54RD+芯片运行频率比较低,RTX-Tiny操作系统比较适合,因为其非常小巧,可以节省系统资源。
首先,需要在Keil MDK中新建一个工程,并按照以下步骤进行配置:
1. 在“Options for Target” 菜单栏中选择“C51”选项卡,勾选“Enable Extended C51 Instruction Set” 和“Enable C51 extensions in the Assembler”。
2. 在“Options for Target” 菜单栏中选择“RTX Configuration”选项卡,勾选“Use RTX Tiny”选项,并设置任务堆栈大小和节拍周期。
下面是一个简单的STC89C54RD+的RTX-Tiny程序,其中包含两个线程,分别输出 "Hello1" 和 "Hello2",其中线程2的优先级较高:
#include <rtx_tiny.h>
#include <REG52.H>
/* 定义任务堆栈 */
uint8_t stack1[32];
uint8_t stack2[32];
/* 定义任务ID */
osThreadId tid1;
osThreadId tid2;
/* 任务1函数 */
void Thread1 (void const *argument) {
while (1) {
printf("Hello1\n");
osDelay(100);
}
}
/* 任务2函数 */
void Thread2 (void const *argument) {
while (1) {
printf("Hello2\n");
osDelay(100);
}
}
int main(void) {
/* 初始化 RTX-Tiny */
osKernelInitialize();
/* 创建任务,优先级为 1 */
tid1 = osThreadCreate(osThread(Thread1), NULL, &stack1[31]);
/* 创建任务,优先级为 2 */
tid2 = osThreadCreate(osThread(Thread2), NULL, &stack2[31]);
/* 设置任务2的优先级为高于任务1的优先级 */
osThreadSetPriority(tid1, osPriorityBelowNormal);
osThreadSetPriority(tid2, osPriorityNormal);
/* 启动 RTX-Tiny */
osKernelStart();
/* 程序永远都不会运行到这里 */
while (1);
return 0;
}
需要注意的几点:
- `main` 函数中要调用 `osKernelInitialize` 函数来初始化 RTX-Tiny,然后调用 `osKernelStart` 函数来启动 RTX-Tiny。
- `osThreadCreate` 函数中需要传入任务函数和任务堆栈指针。
- `osThreadSetPriority` 函数能够动态地改变任务的优先级。
#osThreadCreate和osThreadSetPriority的参数
1,`osThreadCreate` 函数有三个参数:
- `thread`:指向任务函数的指针。
- `argument`:指向任务函数参数的指针。如果不需要参数,可设为 `NULL`。
- `stack_mem`:指向任务堆栈的指针,堆栈的大小在初始化时需要设置。
2,`osThreadSetPriority` 函数有两个参数:
- `thread_id`:任务ID。
- `priority`:任务的优先级,可设置为以下值:
`osPriorityIdle`: 空闲任务的优先级。
`osPriorityLow`: 低优先级。
`osPriorityBelowNormal`: 比正常优先级低一级。
`osPriorityNormal`: 正常优先级。
`osPriorityAboveNormal`: 比正常优先级高一级。
`osPriorityHigh`: 高优先级。
`osPriorityRealtime`: 实时优先级。
在上述示例程序中,使用 `osPriorityBelowNormal` 表示任务1的优先级比任务2低,使用 `osPriorityNormal` 表示任务2的优先级为正常优先级。