单片机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1523|回复: 12
打印 上一主题 下一主题
收起左侧

stm32F103系精简多任务操作系统,1分钟即可上手,小白专用!

[复制链接]
跳转到指定楼层
楼主
Angle145 发表于 2018-6-18 15:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Angle145 于 2018-6-18 16:05 编辑

#include "fsc_stos.h"  //使用内核
//#include "c51mode.h"   //使用C51 IO口操作方式(添加c51mode.h即可使用)

/*****************************用户任务堆栈创建**************************/
//任务堆栈(一维数组)全局变量
OS_STK Task1Stk[TASK_STACK_SIZE];
OS_STK Task2Stk[TASK_STACK_SIZE];
OS_STK Task3Stk[TASK_STACK_SIZE];
OS_STK Task4Stk[TASK_STACK_SIZE];
OS_STK Task5Stk[TASK_STACK_SIZE];
OS_STK Task6Stk[TASK_STACK_SIZE];
OS_STK Task7Stk[TASK_STACK_SIZE];
OS_STK Task8Stk[TASK_STACK_SIZE];
OS_STK Task9Stk[TASK_STACK_SIZE];
OS_STK Task10Stk[TASK_STACK_SIZE];
OS_STK Task11Stk[TASK_STACK_SIZE];
OS_STK Task12Stk[TASK_STACK_SIZE];
/*******************************************************************/

/****************************用户任务函数声明*****************************/
void Task1(void *p_arg);
void Task2(void *p_arg);
void Task3(void *p_arg);
void Task4(void *p_arg);
void Task5(void *p_arg);
void Task6(void *p_arg);
void Task7(void *p_arg);
void Task8(void *p_arg);
void Task9(void *p_arg);
void Task10(void *p_arg);
void Task11(void *p_arg);
void Task12(void *p_arg);
/*******************************************************************/

/******************************用户任务加入内核运行*********************************/
int main(void)
{   
    USART1_Configure(9600); //串口打印初使化,示例代码,未使用串口打印时删除
    //SWJ_OFF;           //关闭调示接口,把调试接口用作普通GPIO口功能
                     //推荐把所有任务都使用到的初使化放在main函数,任务task独立用到的初使化放在task内while(1)之前  
    OSInit();
    OSTaskCreate(Task1, (void*)0, (OS_STK*)&Task1Stk[TASK_STACK_SIZE-1]);  
    OSTaskCreate(Task2, (void*)0, (OS_STK*)&Task2Stk[TASK_STACK_SIZE-1]);
    OSTaskCreate(Task3, (void*)0, (OS_STK*)&Task3Stk[TASK_STACK_SIZE-1]);
    OSTaskCreate(Task4, (void*)0, (OS_STK*)&Task4Stk[TASK_STACK_SIZE-1]);
    OSTaskCreate(Task5, (void*)0, (OS_STK*)&Task5Stk[TASK_STACK_SIZE-1]);
    OSTaskCreate(Task6, (void*)0, (OS_STK*)&Task6Stk[TASK_STACK_SIZE-1]);
    OSTaskCreate(Task7, (void*)0, (OS_STK*)&Task7Stk[TASK_STACK_SIZE-1]);
    OSTaskCreate(Task8, (void*)0, (OS_STK*)&Task8Stk[TASK_STACK_SIZE-1]);
    OSTaskCreate(Task9, (void*)0, (OS_STK*)&Task9Stk[TASK_STACK_SIZE-1]);
    OSTaskCreate(Task10, (void*)0, (OS_STK*)&Task10Stk[TASK_STACK_SIZE-1]);
    OSTaskCreate(Task11, (void*)0, (OS_STK*)&Task11Stk[TASK_STACK_SIZE-1]);
    OSTaskCreate(Task12, (void*)0, (OS_STK*)&Task12Stk[TASK_STACK_SIZE-1]);
        
    SysTickInit(1); //触发systick定时中断的时间隔为1ms(OS时钟)
    OSStart();
}
/***********************************************************************************/

/*********************************用户任务函数代码区*************************************
把void taskX(void *p_arg)看成普通的int main(void)使用即可,while(1){}必须存在。
任务名可以随意修改,Task1是默认的任务名,修改任务名时,任务堆栈、任务函数声明、加入内核函数名、任务函数名四者名称要统一。
这里默认创建了12个用户任务,用户可自行添加或删除(至少一个任务,至多255个任务)
*****************************************************************************************/
void Task1(void *p_arg)  //任务1
{   
     while(1)
       {        
           printf("Task1 is running\r\n");//示例代码,使用时删除                  
           OS_delayMs(1000);  //示例代码,使用时删除        
       }
}
void Task2(void *p_arg)  //任务2
{
    while(1)
     {
        printf("Task2 is running\r\n");//示例代码,使用时删除        
        OS_delayMs(2000);                        //示例代码,使用时删除
     }
}
               
void Task3(void *p_arg) //任务3
{
   while(1)
    {
         printf("Task3 is running\r\n");        //示例代码,使用时删除                                                
         OS_delayMs(4000);                        //示例代码,使用时删除                                                
    }                        
}

void Task4(void *p_arg) //任务4
{
    while(1)
     {               
         printf("Task4 is running\r\n");//示例代码,使用时删除        
        OS_delayMs(5000);                         //示例代码,使用时删除               
      }
}

void Task5(void *p_arg) //任务5
{
    while(1)
     {               
         printf("Task5 is running\r\n");//示例代码,使用时删除        
         OS_delayMs(6000);                                 //示例代码,使用时删除        
      }
}

void Task6(void *p_arg) //任务6
{
    while(1)
     {               
         printf("Task6 is running\r\n");//示例代码,使用时删除        
         OS_delayMs(7000);                                 //示例代码,使用时删除        
      }
}
void Task7(void *p_arg) //任务7
{
    while(1)
     {               
         printf("Task7 is running\r\n");//示例代码,使用时删除        
         OS_delayMs(8000);                                 //示例代码,使用时删除        
      }
}
void Task8(void *p_arg) //任务8
{
    while(1)
     {               
         printf("Task8 is running\r\n");//示例代码,使用时删除        
         OS_delayMs(9000);                                 //示例代码,使用时删除        
      }
}
void Task9(void *p_arg) //任务9
{
    while(1)
     {               
         printf("Task9 is running\r\n");//示例代码,使用时删除        
         OS_delayMs(10000);                         //示例代码,使用时删除               
     }
}
void Task10(void *p_arg) //任务10
{
    while(1)
     {               
         printf("Task10 is running\r\n");//示例代码,使用时删除        
        OS_delayMs(11000);                                 //示例代码,使用时删除        
      }
}
void Task11(void *p_arg) //任务11
{
    while(1)
      {               
         printf("Task11 is running\r\n");//示例代码,使用时删除        
         OS_delayMs(12000);                                 //示例代码,使用时删除        
      }
}
void Task12(void *p_arg) //任务12
{        
   while(1)
     {               
         printf("Task12 is running\r\n");//示例代码,使用时删除        
        OS_delayMs(13000);                                  //示例代码,使用时删除        
     }
}
/************************************************************************************/

/*想要更多任务的自己手动添加,添加任务时,任务堆栈、任务函数声明、加入内核函数名、任务函数名四者均要添加且名称要统一。*/

FSC_STOS_Demo.zip

2.93 MB, 下载次数: 47, 下载积分: 黑币 -5

stm32f1多任务内核

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 转播转播 分享分享 分享淘帖 顶 踩
回复

使用道具 举报

沙发
wuxishun 发表于 2018-6-19 01:21 来自手机 | 只看该作者
这是stm32的程序吗?
回复

使用道具 举报

板凳
 楼主| Angle145 发表于 2018-6-21 07:45 | 只看该作者
wuxishun 发表于 2018-6-19 01:21
这是stm32的程序吗?

回复

使用道具 举报

地板
 楼主| Angle145 发表于 2018-6-21 19:54 | 只看该作者
如果好用希望大家评论留言一下,让更多的伙伴看到,分享你我,快乐大家!
回复

使用道具 举报

5#
lkhlkh 发表于 2018-6-23 15:52 来自手机 | 只看该作者
谢谢楼主分享,我一直用freertos,不懂这个和freertos相比有什么优劣?现在在外面,还没机会试!
回复

使用道具 举报

6#
wuxishun 发表于 2018-6-25 06:17 来自手机 | 只看该作者
谢谢分享,还在学习中
回复

使用道具 举报

7#
li986389855 发表于 2018-7-13 11:28 | 只看该作者
好东西 谢谢分享
回复

使用道具 举报

8#
wsnnn 发表于 2018-8-28 17:39 | 只看该作者
谢谢楼主分享,我一直用freertos,不懂这个和freertos相比有什么优劣?现在在外面,还没机会试!
回复

使用道具 举报

9#
dzfree 发表于 2018-11-13 14:57 | 只看该作者
问一下 楼主,keil仿真运行  串口怎么没有数据打印出来呢
回复

使用道具 举报

10#
Kinarmy 发表于 2018-12-23 15:26 | 只看该作者
这几个任务有优先级么?
回复

使用道具 举报

11#
zjlzdf 发表于 2018-12-24 08:54 | 只看该作者
谢谢楼主分享
回复

使用道具 举报

12#
 楼主| Angle145 发表于 2019-1-10 20:23 | 只看该作者
dzfree 发表于 2018-11-13 14:57
问一下 楼主,keil仿真运行  串口怎么没有数据打印出来呢

仿真里用不了,仿真和实际有差别,以实际为准
回复

使用道具 举报

13#
 楼主| Angle145 发表于 2019-1-10 20:24 | 只看该作者
Kinarmy 发表于 2018-12-23 15:26
这几个任务有优先级么?

这个是精简的,没有优先级,请下载最新版,那个灵活性比较大
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|单片机论坛 |51黑电子论坛单片机.

Powered by 单片机教程网

快速回复 返回顶部 返回列表