前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >AIoT应用创新大赛-keil开发--(2)移植TencentOS tiny与对接腾讯云IoT

AIoT应用创新大赛-keil开发--(2)移植TencentOS tiny与对接腾讯云IoT

原创
作者头像
烫烫烫烫烫烫锟斤拷
修改2022-01-09 17:51:49
1.7K0
修改2022-01-09 17:51:49
举报

一、前言

在上一篇中,我们利用MCUXpresso Config Tools生出来一个Hello World 的裸机工程,这一篇将在Keil环境下移植TencentOS tiny到这个裸机工程,并移植对接腾讯云的工程。

源码中也有相关工程参考https://github.com/OpenAtomFoundation/TencentOS-tiny/tree/master/board/TencentOS_Tiny_EVB_MX_Plus/KEIL


二、前期准备

  • 本系列文章第一篇中安装的软件环境
  • 在第一篇文章中使用MCUXpresso Config Tools搭建的Hello World 裸机工程
  • TencentOS-Tiny-AIoT开发板硬件资料(比赛微信群公告中的资料包中文件)
  • NXP_RT1062_TencentOS_Tiny_AIoT.rar(比赛微信群公告中的资料包中文件)
  • TencentOS-tiny源码(可在Github代码仓\码云代码仓下载)

三、移植TencentOS tiny

3.1.准备文件

将NXP_RT1062_TencentOS_Tiny_AIoT里面的TencentOS_Tiny文件夹复制到自建工程根目录下(也从官方源码中复制文件,都可以)

主要使用文件如下表

一级目录

二级目录

说明

arch

arm

TencentOS tiny适配的IP核架构(含M核中断、调度、tick相关代码)

board

NUCLEO_L073RZ

移植目标芯片的工程文件

kernel

core

TencentOS tiny内核源码

pm

TencentOS tiny低功耗模块源码

osal

cmsis_os

TencentOS tiny提供的cmsis os 适配

效果如图

3.2.配置工程

打开keil工程,这里建议从hello_world1 flexspi_nor_debughello_world1 flexspi_nor_sdram_debug选择一个作为后续开发工程。这两个配置都是把程序固化到flash里面的,其中hello_world1 flexspi_nor_debug是没有在DCD初始化好SDRAM的hello_world1 flexspi_nor_sdram_debug是在DCD中初始化好SDRAM的。简单可以理解为,如果后续开发不使用SDRAM就用第一个,使用的话就用第二个,这里后期也是能自由切换的。这里笔者就使用hello_world1 flexspi_nor_sdram_debug作为演示。

3.3.添加相关文件

添加arch平台代码

添加kernel/core下所有.c文件(pm为低功耗组件,可不用添加)

添加cmsis抽象层osal\cmsis_os\cmsis_os.c文件

为方便后期修改配置,可添加tos_config\tos_config.h文件

3.4.添加头文件目录

3.5.编写代码

打开source\hello_world.c文件,写个程序试试水

代码语言:javascript
复制
#include "fsl_device_registers.h"
#include "fsl_debug_console.h"
#include "pin_mux.h"
#include "clock_config.h"
#include "board.h"
#include "tos_k.h"

void SysTick_Handler(void)
{
  if (tos_knl_is_running())
  {
    tos_knl_irq_enter();
    tos_tick_handler();
    tos_knl_irq_leave();
  }
} 

#define TASK1_STK_SIZE       1024
k_task_t task1;
uint8_t task1_stk[TASK1_STK_SIZE];


#define TASK2_STK_SIZE       1024
k_task_t task2;
uint8_t task2_stk[TASK2_STK_SIZE];

void task1_entry(void *arg)
{
    while (1) {
    	PRINTF("###I am task1\r\n");
        tos_task_delay(2000);
    }
}

void task2_entry(void *arg)
{
    while (1) {
    	PRINTF("***I am task2\r\n");
        tos_task_delay(1000);
    }
}

int main(void)
{
    char ch;

    /* Init board hardware. */
    BOARD_ConfigMPU();
    BOARD_InitBootPins();
    BOARD_InitBootClocks();
    BOARD_InitDebugConsole();
    SystemCoreClockUpdate();

    tos_knl_init(); // TencentOS Tiny kernel initialize
    tos_task_create(&task1, "task1", task1_entry, NULL, 4, task1_stk, TASK1_STK_SIZE, 0); // Create task1
    tos_task_create(&task2, "task2", task2_entry, NULL, 3, task2_stk, TASK2_STK_SIZE, 0);// Create task2
    tos_knl_start();
}

3.6.编译下载,打开串口助手查看现象


四、对接腾讯云IoT

4.1.配置引脚

打开工程的MCUXpresso Config Tools配置文件

参考IO表,配置uart2与LED

具体配置如下图(注意重命名)

点击更新源代码

4.2.准备文件

大部分文件都在第三步准备好了

拷贝NXP_RT1062_TencentOS_Tiny_AIoT\source里main.c与mqttclient_iot_explorer.c到自建工程source目录下

4.3.添加相关文件

这里因为Keil没有二级目录管理,因此文件夹显得比较多,按照自己的实际习惯添加即可

TencentOS_Tiny\components\connectivity\mqttclient\common下的mqtt_list.crandom.c

TencentOS_Tiny\components\connectivity\mqttclient\mqtt

TencentOS_Tiny\components\connectivity\mqttclient\mqttclient

TencentOS_Tiny\components\connectivity\mqttclient\network

TencentOS_Tiny\components\connectivity\mqttclient\platform\TencentOS-tiny

TencentOS_Tiny\components\utils\JSON\src

TencentOS_Tiny\platform\hal\nxp\rt1060\src

TencentOS_Tiny\net\at\src

TencentOS_Tiny\net\sal_module_wrapper

TencentOS_Tiny\devices\esp8266

添加这些文件夹下所有.c文件

为方便后期修改配置,可添加tos_config\mqtt_config.h文件

删除hello_world.c添加main.cmqttclient_iot_explorer.c

4.4.添加头文件目录

4.5.修改工程设置

加入SDK_DEBUGCONSOLE_UART全局宏,使代码支持printf函数

4.6.修改代码

*main.c

注释掉17行 #include "ec600s.h"

添加

代码语言:javascript
复制
void SysTick_Handler(void)
{
  if (tos_knl_is_running())
  {
    tos_knl_irq_enter();
    tos_tick_handler();
    tos_knl_irq_leave();
  }
}

可以注释掉LPUART4_IRQHandler函数

*mqttclient_iot_explorer.c

注释掉第8行#include "ec600s.h"

4.7.配置云

参考https://gitee.com/Tencent/TencentOS-tiny/blob/master/doc/30.TencentOS_Tiny_EVB_AIoT_QuickStart.md 四. EVB_AIoT开发板上使用TencentOS tiny对接腾讯云IoT Explorer进行操作

也可在下载的源码中找到:TencentOS-tiny-master\doc\30.TencentOS_Tiny_EVB_AIoT_QuickStart.md

4.8.编译下载运行

五、可能碰到的问题与建议

5.1.为啥在3.3步中添加arch平台代码添加的是GCC文件下的代码

MDK AC6在汇编上的语法支持很接近GCC,对于工程默认配置来说添加GCC文件夹下最简单

如果想添加armcc文件夹下的文件,请按下图修改

5.2.无法进入任务

检查是否添加下面代码

代码语言:javascript
复制
void SysTick_Handler(void)
{
  if (tos_knl_is_running())
  {
    tos_knl_irq_enter();
    tos_tick_handler();
    tos_knl_irq_leave();
  }
}

5.3.运行printf后卡死

加入SDK_DEBUGCONSOLE_UART全局宏

5.4.出现FCARM - Output Name not specified, please check 'Options for Target - Utilities'编译提示

检查出现错误的文件类型是否正确,例如

该图是正确的.h文件类型
该图是正确的.h文件类型

5.5.出现source/main.c(115): error: use of undeclared identifier 'BOARD_INITPINS_LED_GPIO'错误

配置并修改LED的标签与标识符

5.6.TencentOS tiny学习建议

可以参考下面两个链接学习

https://gitee.com/Tencent/TencentOS-tiny/blob/master/doc/04.Development_Manual.md

https://gitee.com/Tencent/TencentOS-tiny/blob/master/doc/05.SDK_Manual.md

有其他问题可在本文下交流

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、前言
  • 二、前期准备
  • 三、移植TencentOS tiny
    • 3.1.准备文件
      • 3.2.配置工程
        • 3.3.添加相关文件
          • 3.4.添加头文件目录
            • 3.5.编写代码
              • 3.6.编译下载,打开串口助手查看现象
              • 四、对接腾讯云IoT
                • 4.1.配置引脚
                  • 4.2.准备文件
                    • 4.3.添加相关文件
                      • 4.4.添加头文件目录
                        • 4.5.修改工程设置
                          • 4.6.修改代码
                            • 4.7.配置云
                              • 4.8.编译下载运行
                              • 五、可能碰到的问题与建议
                                • 5.1.为啥在3.3步中添加arch平台代码添加的是GCC文件下的代码
                                  • 5.2.无法进入任务
                                    • 5.3.运行printf后卡死
                                      • 5.4.出现FCARM - Output Name not specified, please check 'Options for Target - Utilities'编译提示
                                        • 5.5.出现source/main.c(115): error: use of undeclared identifier 'BOARD_INITPINS_LED_GPIO'错误
                                          • 5.6.TencentOS tiny学习建议
                                          相关产品与服务
                                          TencentOS Server
                                          TencentOS Server 是腾讯云推出的 Linux 操作系统,它旨在为云上运行的应用程序提供稳定、安全和高性能的执行环境。它可以运行在腾讯云 CVM 全规格实例上,包括黑石物理服务器2.0。
                                          领券
                                          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档