当前位置:   article > 正文

手把手教-中移物联OneOS系统基于GD32单片机点灯

oneos

一、工程创建指令说明

常用指令说明
OneOS-Cube常用的用户指令非常简单,常用指令简单介绍如下:
在OneOS 3.0及以上版本使用:
oos project:创建工程命令,提供菜单交互环境创建工程。
oos config系统配置命令,提供菜单交互环境对系统功能宏进行控制,宏配置结果自动保存到oneos_config.h文件中。
oos build:代码编译命令,将根据编译配置文件的描述进行代码编译。
oos clean:清理工程命令,对前期编译生成的中间文件和二进制结果文件进行删除。
oos init -i XXX:生成IDE工程命令,其中"XXX"代表目标IDE环境,具体支持的IDE参考oos help init命令说明。例如生成Keil工程:oos init -i keil 。
oos pack:第三方组件操作命令,能够进行组件的上传、下载、搜索等。
oos:查看oos命令选项说明。
在这里插入图片描述

在OneOS 2.4及以下版本使用:
project: 创建工程命令,提供菜单交互环境创建工程。
menuconfig: 系统配置命令,提供菜单交互环境对系统功能宏进行控制,宏配置结果自动保存到oneos_config.h文件中。
scons: 代码编译命令,将根据SConstruct、SConscript脚本的描述进行代码编译。
scons --ide=XXX: 制作IDE工程命令,其中"XXX"代表目标IDE环境,具体支持的IDE参考scons --help命令说明。例如生成Keil工程:scons --ide=MDK。
scons --help: 查看scons命令扩展选项说明。
在这里插入图片描述
版本V3.1.0
在这里插入图片描述

二、工程创建步骤

1.下载OneOS-Lite 源码;
2.进入projrct文件;
3.输入指令,选择芯片类型并创建工程;

oos project
  • 1

在这里插入图片描述
在这里插入图片描述
4.进入工程,进行编译

cd GD32F450Zk
oos build
  • 1
  • 2

在这里插入图片描述
在这里插入图片描述
5.输入指令,进行系统配置命令,提供菜单交互环境对系统功能宏进行控制,宏配置结果自动保存到oneos_config.h文件中。

menuconfig
  • 1

在这里插入图片描述
在这里插入图片描述
6.重新生成工程,例如

oos init -i keil
  • 1

三、内核启动流程

内核启动介绍了整个系统从硬件上电如何一步步进入用户程序的过程。一般情况下,启动过程分为硬件上电,首先运行和体系架构相关的启动汇编文件,进行一些最基本硬件的初始化(例如CPU配置,时钟,栈地址,RAM等),为内核运行铺垫好环境,然后初始化内核各模块(例如调度器,定时器等),接着创建系统任务(例如空闲任务)和用户任务,最后启动调度和运行用户程序
自动初始化:
自动初始化的实现是利用编译器的段和段排序的特性,以GCC编译器为例具体如下:
在这里插入图片描述
在这里插入图片描述
编译之后,初始化宏对应的段结构如下:
在这里插入图片描述

整个系统启动过程和内核启动过程

在这里插入图片描述
内核启动主要有下面几个步骤:

1.系统先从启动文件开始运行,然后进入 OneOS Lite的内核启动函数 os_kernel_init()和os_kernel_start();
2.os_kernel_init中调用_k_run_init_call函数执行OS_INIT_LEVEL_PRE_KERNEL_1,进行内核启动前的第一阶段的初始化;
3.初始化内核各模块,如tick队列,调度器,定时器等;
4.创建recycle,idle,timer,sys系统任务;
5.启动调度器,最后会运行sys任务,sys任务调用_k_run_init_call函数依次执行其他自动化宏注册的函数,最后调用main函数进入用户程序入口。

四、工程配置

boot设置,根据要求修改,保存退出;
在这里插入图片描述
在这里插入图片描述
输入指令,重新生成工程,例如 keil MDK工程

oos init -i keil
  • 1

时钟修改
在这里插入图片描述
修改函数,每秒钟打印 led 指示灯的状态,如下:

static void user_task(void *parameter)
{
    int i = 0;

    for (i = 0; i < led_table_size; i++)
    {
        os_pin_mode(led_table[i].pin, PIN_MODE_OUTPUT);
    }

    while (1)
    {
        for (i = 0; i < led_table_size; i++)
        {
		     printf("led on\r\n");
            os_pin_write(led_table[i].pin, led_table[i].active_level);
            os_task_msleep(1000);
			printf("led off\r\n");
            os_pin_write(led_table[i].pin, !led_table[i].active_level);
            os_task_msleep(1000);
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

保存,编译下载到开发板,即可。

五、测试结果

打开串口测试软件,可以看到每隔 1s 打印一次 led 指示灯的状态。
在这里插入图片描述

参考
中移物联网 OneOS 操作系统环境搭建和工程创建
文档中心/操作系统/OneOS Lite/V3.1.0/快速开发指南
V3.1.0/内核/内核启动

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/938475
推荐阅读
相关标签
  

闽ICP备14008679号