你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【NUCLEO-C031C6】移植TobudOS系统

[复制链接]
TLLED 发布时间:2024-3-19 16:21

一、下载系统源码

下载地址:https://atomgit.com/OpenAtomFoundation/TobudOS

001.png

二、复制文件到项目工程

复制源文件到工程目录

002.png

三、添加源文件到项目

3.1、添加下面源码到工程

003.png

3.2、添加头文件

004.png

3.3、tos_config.h

#ifndef _TOS_CONFIG_H_
#define  _TOS_CONFIG_H_

#include "main.h"                // 目标芯片头文件,用户需要根据情况更改

#define TOS_CFG_TASK_PRIO_MAX           10u         // 配置TencentOS tiny默认支持的最大优先级数量

#define TOS_CFG_ROUND_ROBIN_EN          0u                // 配置TencentOS tiny的内核是否开启时间片轮转

#define TOS_CFG_OBJECT_VERIFY_EN           1u        // 配置TencentOS tiny是否校验指针合法

#define TOS_CFG_TASK_DYNAMIC_CREATE_EN  1u                // TencentOS tiny 动态任务创建功能宏

#define TOS_CFG_EVENT_EN                1u                // TencentOS tiny 事件模块功能宏

#define TOS_CFG_MMBLK_EN                1u                //配置TencentOS tiny是否开启内存块管理模块

#define TOS_CFG_MMHEAP_EN               1u                //配置TencentOS tiny是否开启动态内存模块

#define TOS_CFG_MMHEAP_DEFAULT_POOL_EN  1u                // TencentOS tiny 默认动态内存池功能宏

#define TOS_CFG_MMHEAP_DEFAULT_POOL_SIZE        0x100        // 配置TencentOS tiny默认动态内存池大小

#define TOS_CFG_MUTEX_EN                1u                // 配置TencentOS tiny是否开启互斥锁模块

#define TOS_CFG_MESSAGE_QUEUE_EN        1u                // 配置TencentOS tiny是否开启消息队列模块

#define TOS_CFG_MAIL_QUEUE_EN           1u                // 配置TencentOS tiny是否开启消息邮箱模块

#define TOS_CFG_PRIORITY_MESSAGE_QUEUE_EN        1u        // 配置TencentOS tiny是否开启优先级消息队列模块

#define TOS_CFG_PRIORITY_MAIL_QUEUE_EN        1u                // 配置TencentOS tiny是否开启优先级消息邮箱模块

#define TOS_CFG_TIMER_EN                1u                // 配置TencentOS tiny是否开启软件定时器模块

#define TOS_CFG_PWR_MGR_EN              0u                // 配置TencentOS tiny是否开启外设电源管理模块

#define TOS_CFG_TICKLESS_EN             0u                // 配置Tickless 低功耗模块开关

#define TOS_CFG_SEM_EN                  1u                // 配置TencentOS tiny是否开启信号量模块

#define TOS_CFG_TASK_STACK_DRAUGHT_DEPTH_DETACT_EN      1u        // 配置TencentOS tiny是否开启任务栈深度检测

#define TOS_CFG_FAULT_BACKTRACE_EN      0u                // 配置TencentOS tiny是否开启异常栈回溯功能

#define TOS_CFG_IDLE_TASK_STK_SIZE      128u        // 配置TencentOS tiny空闲任务栈大小

#define TOS_CFG_CPU_TICK_PER_SECOND     1000u        // 配置TencentOS tiny的tick频率

#define TOS_CFG_CPU_CLOCK               (SystemCoreClock)        // 配置TencentOS tiny CPU频率

#define TOS_CFG_TIMER_AS_PROC           1u                // 配置是否将TIMER配置成函数模式

#define        TOS_CFG_OBJ_DYNAMIC_CREATE_EN        1u                // 配置是否开启任务的动态分配处理和堆栈

#endif

3.4、stm32cxx_it.c中添加心跳函数

/**
  * @brief This function handles System tick timer.
  */
void SysTick_Handler(void)
{

  HAL_IncTick();
        if(tos_knl_is_running())
        {
                tos_knl_irq_enter();
                tos_tick_handler();
                tos_knl_irq_leave();
        }

3.5、fun_task.c

#include "main.h"
#include "cmsis_os.h"

//task1
#define TASK1_STK_SIZE                256
void task1(void *pdata);
osThreadDef(task1, osPriorityNormal, 1, TASK1_STK_SIZE);

//task2
#define TASK2_STK_SIZE                256
void task2(void *pdata);
osThreadDef(task2, osPriorityNormal, 1, TASK2_STK_SIZE);

void task1(void *pdata)
{
         int count = 1;
         while(1)
         {
                         printf("\r\nHello world!\r\n###This is task1 \r\n");
//                         led2_tog();
                         osDelay(2000);
         }
}
void task2(void *pdata)
{
         int count = 1;
         while(1)
         {
                          printf("\r\nHello TencentOS !\r\n***This is task2 \r\n");
//                                led3_tog();
                         osDelay(1000);
         }
}

void task_create(void)
{
        osThreadCreate(osThread(task1), NULL);// Create task1
        osThreadCreate(osThread(task2), NULL);// Create task2
        osKernelStart();//Start TOS Tiny        
}

3.6、main.c

#include "main.h"
#include "cmsis_os.h"

void SystemClock_Config(void);

int main(void)
{
  HAL_Init();

  /* Configure the system clock */
  SystemClock_Config();

        init_led();
        init_usart(115200); 
        osKernelInitialize(); //TOS Tiny kernel initialize
  task_create();

  while (1)
  {
  }
}

四、运行

编译下载程序后,复位开发板,串口输出内容

100.png

收藏 评论0 发布时间:2024-3-19 16:21

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版