jrh200310 发表于 4 天前

移植CosyOS-III到AI8051U的32位模式下跑两个简单任务例程

CosyOS是迟凯峰老师发布的可用于8051的RTOS,目前已更新到CosyOS-III,本文基于AI8051U的32位模式,采用KEIL251开发工具,用CosyOS-III跑了两个简单的任务。

AI8051U的RAM达到到34K,为了发挥其性能,需要跑RTOS,本例子从迟凯峰老师发布的CosyOS-III,从STC32G12K128移植到AI8051U,并得到迟老师的指点。为有兴趣的小伙伴做一个参考。RTOS的核心文件为HOOK,Port,System。

由于AI8051U有高达32K的XDATA,故将任务栈空间放在XDATA上。移植过程中要注意几个地方。



国芯人工智能 发表于 4 天前

移植CosyOS-III到AI8051U的32位模式下跑两个简单任务例程

引言

CosyOS-III是由迟凯峰老师发布的一款适用于8051架构的实时操作系统(RTOS),目前已更新至CosyOS-III版本。本文基于AI8051U的32位模式,采用KEIL251开发工具,成功将CosyOS-III移植到AI8051U,并运行了两个简单的任务。AI8051U的RAM容量高达34K,为了充分发挥其性能,运行RTOS是一个理想的选择。本文将从移植过程、关键点及注意事项等方面进行详细阐述,为有兴趣的开发者提供参考。

1. 硬件平台与开发工具

1.1 AI8051U简介

AI8051U是一款高性能的8051架构微控制器,具备32位模式,RAM容量高达34K,其中XDATA空间为32K。其强大的硬件资源为运行RTOS提供了良好的基础。

1.2 开发工具

本文采用KEIL251作为开发工具,KEIL251是一款广泛使用的8051开发环境,支持C语言编程,具备强大的调试功能。

2. CosyOS-III简介

CosyOS-III是一款轻量级的RTOS,专为8051架构设计,具备任务管理、时间管理、信号量、消息队列等基本功能。其核心文件包括HOOK、Port和System,分别用于钩子函数、端口适配和系统管理。

3. 移植过程

3.1 移植准备

首先,从迟凯峰老师发布的CosyOS-III源码中获取核心文件,包括HOOK.c、Port.c和System.c。这些文件是RTOS的核心,需要根据AI8051U的硬件特性进行适配。

3.2 任务栈空间分配

由于AI8051U具备32K的XDATA空间,为了充分利用这一资源,将任务栈空间分配在XDATA上。具体实现如下:

c
define TASKSTACKSIZE 1024
xdata uint8t Task1Stack;
xdata uint8t Task2Stack;

3.3 端口适配

在Port.c文件中,需要根据AI8051U的硬件特性进行适配。主要包括以下几个方面:
中断向量表:根据AI8051U的中断向量表,修改相应的中断服务程序入口地址。
时钟配置:根据AI8051U的时钟频率,配置系统时钟节拍。
栈指针初始化:在任务创建时,初始化任务栈指针。

3.4 系统初始化

在System.c文件中,进行系统初始化,包括任务管理、时间管理等模块的初始化。具体实现如下:

c
void SystemInit(void) {
    OSInit();// 初始化RTOS
    OSTaskCreate(Task1, NULL, &Task1Stack, 1);// 创建任务1
    OSTaskCreate(Task2, NULL, &Task2Stack, 2);// 创建任务2
    OSStart();// 启动RTOS
}

4. 任务例程

本文运行了两个简单的任务,分别用于LED闪烁和串口输出。具体实现如下:

4.1 任务1:LED闪烁

c
void Task1(void pdata) {
    while (1) {
      LEDON();// 点亮LED
      OSTimeDly(500);// 延时500ms
      LEDOFF();// 熄灭LED
      OSTimeDly(500);// 延时500ms
    }
}

4.2 任务2:串口输出

c
void Task2(void pdata) {
    while (1) {
      UARTSendString("Hello, AI8051U!\r\n");// 串口输出字符串
      OSTimeDly(1000);// 延时1000ms
    }
}

5. 注意事项

在移植过程中,需要注意以下几个关键点:
栈空间分配:确保任务栈空间足够大,避免栈溢出。
中断处理:正确配置中断向量表,确保中断服务程序能够正常执行。
时钟配置:根据实际需求,合理配置系统时钟节拍,确保任务调度准确。

6. 结论

本文成功将CosyOS-III移植到AI8051U的32位模式下,并运行了两个简单的任务。通过合理利用AI8051U的硬件资源,充分发挥了RTOS的性能优势。本文为有兴趣的开发者提供了详细的移植过程和注意事项,希望能够为相关开发工作提供参考。

参考文献

迟凯峰. CosyOS-III用户手册. 2023.
AI8051U数据手册. 2023.
KEIL251用户手册. 2023.

附录



[本文内容由国芯人工智能辅助生成,仅供参考]

jrh200310 发表于 4 天前


#include "task.h"
#include "Devconfig.h"



#define TASK_A_PRI1
#define TASK_B_PRI1

#define TASK_A_STACK   128
#define TASK_B_STACK   128



/* 启动钩子 */
void start_hook(void)
{
        uStartTask(TASK_A, OS_STATUS_READY); // 启动 TASK_A
        uStartTask(TASK_B, OS_STATUS_READY); // 启动 TASK_B
}
//-------------------------------------------------------------------------------------
/* 创建 TASK_CHECK_CAT1 */
uCreateTask(TASK_A, TASK_A_PRI, TASK_A_STACK , 0, 0)
{
        while(1)
                {
                  if(devstate.cat1_work_flag == 0) //检查是不是为0
                  {
                      printf("runing TASK_A\n");
                      uDelay_ms(100);
                }               
          }
}
//------------------------------------------------------------------------------------
/* 创建 TASK_B */
uCreateTask(TASK_B, TASK_B_PRI, TASK_B_STACK , 0, 0)
{
       
        P5M0 |= 0x01; P5M1 &= ~0x01;
        while(1)
                {
                  P50 = !P50;       
                  printf("runing TASK_B\n");
                  uDelay_ms(500);
          }
}

创建两任务,分别在100mS和500mS打印任务信息。




jrh200310 发表于 4 天前

jrh200310 发表于 2025-4-28 15:36
#include "task.h"
#include "Devconfig.h"



注意,INT0中断被系统使用,因此不能用于外部中断。
页: [1]
查看完整版本: 移植CosyOS-III到AI8051U的32位模式下跑两个简单任务例程