打印

关于GD32F20x的uCOS_III移植例程

[复制链接]
5220|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zgp111|  楼主 | 2021-7-18 22:08 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zgp111 于 2021-7-18 22:10 编辑

#技术资源# #申请原创#
关于GD32F20x的uCOS_III移植例程

最近在使用GD32的片子,估计有好多都是从STM32转到GD32来的吧?!

握手 握手 QAQ

我使用的是GD32F207VE,在移植uCOS的时候,自己老是移植不好,在网

上找移植好的例程也没有,而且找到的一个例程都是有问题的QAQ,于

是只有动手喽,这里我将自己移植的一些心得及例程分享出来。

1.到GD32官网下载demo

2.下载uCOS_III源码,这个就没必要到官网下载了,到 (原子哥 || 火哥) 那
里白piao就是了,


3.准备好了“材料”就开始干,打开GD32官网的demo:
——“01_GPIO_Runing_Led”,我们最熟悉的LED,就它了QAQ一灯大师
先别忙着移植uCOS,先试一试Demo没问题了再移植,我这里没有开发
板,写了个串口试了试
注意默认晶振是25MHz


然后修改时钟配置函数,我用的是8MHz


4.测试没问题就准备移植uCOS,这里使用 @原子哥 的图片,如图按照下
图将所有文件添加进去。


5.文件准备好了然后就向Demo工程添加文件及文件路径,这步应该驾
轻就熟,从STC89开始,还是熟悉的界面,熟悉的味道QAQ

6.配置uCOS,主要就是下面三个文件,这里根据自己需要进行配置和
裁剪


到这里基本就万事俱备,只欠东风了,后面可以看看我配置好的例程
这里贴出一些代码,祝大家——码码愉快,早日完贷!


int main(void)
{
OS_ERR err;
        
        CPU_SR_ALLOC();
        
        nvic_priority_group_set(NVIC_PRIGROUP_PRE2_SUB2);
        
        BSP_Init();
               
        Hardware_Init();
        
        OSInit(&err);
        
        OS_CRITICAL_ENTER();

        OSTaskCreate((OS_TCB         * )&StartTaskTCB,
                                 (CPU_CHAR        * )"start task",
                 (OS_TASK_PTR )start_task,
                 (void                * )0,
                 (OS_PRIO          )START_TASK_PRIO,
                 (CPU_STK   * )&START_TASK_STK[0],
                 (CPU_STK_SIZE)START_STK_SIZE/10,
                 (CPU_STK_SIZE)START_STK_SIZE,
                 (OS_MSG_QTY  )0,
                 (OS_TICK          )0,
                 (void           * )0,
                 (OS_OPT      )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,
                 (OS_ERR         * )&err);
        OS_CRITICAL_EXIT();
        OSStart(&err);
        while(1);
}


void start_task(void *p_arg)
{
        OS_ERR err;
        
        CPU_SR_ALLOC();
        
        p_arg = p_arg;
        
        CPU_Init();

        Mem_Init();  
        
#if OS_CFG_STAT_TASK_EN > 0u
        
   OSStatTaskCPUUsageInit(&err);
        
#endif
        
#ifdef CPU_CFG_INT_DIS_MEAS_EN
        
    CPU_IntDisMeasMaxCurReset();        
        
#endif
        
#if        OS_CFG_SCHED_ROUND_ROBIN_EN
        
        OSSchedRoundRobinCfg(DEF_ENABLED,1,&err);  
        
#endif               
        
        OS_CRITICAL_ENTER();
                                 

        OSTaskCreate((OS_TCB         * )&Led1TaskTCB,               
                                 (CPU_CHAR        * )"led1 task",                 
                 (OS_TASK_PTR )led1_task,                        
                 (void                * )0,                                       
                 (OS_PRIO          )LED1_TASK_PRIO,            
                 (CPU_STK   * )&LED1_TASK_STK[0],        
                 (CPU_STK_SIZE)LED1_STK_SIZE/10,        
                 (CPU_STK_SIZE)LED1_STK_SIZE,               
                 (OS_MSG_QTY  )0,                                       
                 (OS_TICK          )0,                                       
                 (void           * )0,                                
                 (OS_OPT      )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,
                 (OS_ERR         * )&err);
                                                                 
        OSTaskCreate((OS_TCB         * )&Led2TaskTCB,               
                                 (CPU_CHAR        * )"led2 task",                 
                 (OS_TASK_PTR )led2_task,                        
                 (void                * )0,                                       
                 (OS_PRIO          )LED2_TASK_PRIO,            
                 (CPU_STK   * )&LED2_TASK_STK[0],        
                 (CPU_STK_SIZE)LED2_STK_SIZE/10,        
                 (CPU_STK_SIZE)LED2_STK_SIZE,               
                 (OS_MSG_QTY  )0,                                       
                 (OS_TICK          )0,                                       
                 (void           * )0,                                
                 (OS_OPT      )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,
                 (OS_ERR         * )&err);
                                                                 
        OSTaskCreate((OS_TCB         * )&Led3TaskTCB,               
                                 (CPU_CHAR        * )"led3 task",                 
                 (OS_TASK_PTR )led3_task,                        
                 (void                * )0,                                       
                 (OS_PRIO          )LED3_TASK_PRIO,            
                 (CPU_STK   * )&LED3_TASK_STK[0],        
                 (CPU_STK_SIZE)LED3_STK_SIZE/10,        
                 (CPU_STK_SIZE)LED3_STK_SIZE,               
                 (OS_MSG_QTY  )0,                                       
                 (OS_TICK          )0,                                       
                 (void           * )0,                                
                 (OS_OPT      )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,
                 (OS_ERR         * )&err);
                                                                 
        OSTaskCreate((OS_TCB         * )&Led4TaskTCB,               
                                 (CPU_CHAR        * )"led4 task",                 
                 (OS_TASK_PTR )led4_task,                        
                 (void                * )0,                                       
                 (OS_PRIO          )LED4_TASK_PRIO,            
                 (CPU_STK   * )&LED4_TASK_STK[0],        
                 (CPU_STK_SIZE)LED4_STK_SIZE/10,        
                 (CPU_STK_SIZE)LED4_STK_SIZE,               
                 (OS_MSG_QTY  )0,                                       
                 (OS_TICK          )0,                                       
                 (void           * )0,                                
                 (OS_OPT      )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,
                 (OS_ERR         * )&err);
                                                                 
        OSTaskCreate((OS_TCB         * )&Led5TaskTCB,               
                                 (CPU_CHAR        * )"led5 task",                 
                 (OS_TASK_PTR )led5_task,                        
                 (void                * )0,                                       
                 (OS_PRIO          )LED5_TASK_PRIO,            
                 (CPU_STK   * )&LED5_TASK_STK[0],        
                 (CPU_STK_SIZE)LED5_STK_SIZE/10,        
                 (CPU_STK_SIZE)LED5_STK_SIZE,               
                 (OS_MSG_QTY  )0,                                       
                 (OS_TICK          )0,                                       
                 (void           * )0,                                
                 (OS_OPT      )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,
                 (OS_ERR         * )&err);
                                                                 
        OSTaskCreate((OS_TCB         * )&Led6TaskTCB,               
                                 (CPU_CHAR        * )"led6 task",                 
                 (OS_TASK_PTR )led6_task,                        
                 (void                * )0,                                       
                 (OS_PRIO          )LED6_TASK_PRIO,            
                 (CPU_STK   * )&LED6_TASK_STK[0],        
                 (CPU_STK_SIZE)LED6_STK_SIZE/10,        
                 (CPU_STK_SIZE)LED6_STK_SIZE,               
                 (OS_MSG_QTY  )0,                                       
                 (OS_TICK          )0,                                       
                 (void           * )0,                                
                 (OS_OPT      )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,
                 (OS_ERR         * )&err);

        OS_TaskSuspend((OS_TCB*)&StartTaskTCB,&err);
                                                                 
        OS_CRITICAL_EXIT();
                                                                 
}


void led1_task(void *p_arg)
{
        OS_ERR err;
        p_arg = p_arg;
        while(1)
        {
                //put your C code
               
                LED1_TOGGLE();
               
                OSTimeDlyHMSM(0,0,0,900,OS_OPT_TIME_PERIODIC,&err);
               
                LED1_TOGGLE();
               
                OSTimeDlyHMSM(0,0,0,100,OS_OPT_TIME_PERIODIC,&err);
        }
}


void led2_task(void *p_arg)
{
        OS_ERR err;
        p_arg = p_arg;
        while(1)
        {
                //put your C code
               
                LED2_TOGGLE();
               
                OSTimeDlyHMSM(0,0,0,400,OS_OPT_TIME_PERIODIC,&err);
               
                LED2_TOGGLE();
               
                OSTimeDlyHMSM(0,0,0,100,OS_OPT_TIME_PERIODIC,&err);
        }
}

uint8_t temp_String[1024];

void led3_task(void *p_arg)
{
        uint16_t i;
        
        OS_ERR err;
        p_arg = p_arg;
        
        while(1)
        {
                //put your C code
               
                if(USART0String_flag)
                {
        
                        for(i=0;i<1024;i++){
                        
                                if((USART0_String[i]<0x20)||(USART0_String[i]>0x7e)) break;
                                
                        }
                        
                        CopyString(temp_String,USART0_String,i);
                        
                        SendArray(USART1,temp_String,i);
                        
                        ClearnString(USART0_String,1024);
                        
                        ClearnString(temp_String,1024);
                        
                }
               
                OSTimeDlyHMSM(0,0,0,20,OS_OPT_TIME_PERIODIC,&err);
        }
}


void led4_task(void *p_arg)
{
        
        uint16_t i;
        
        OS_ERR err;
        p_arg = p_arg;
        
        while(1)
        {
                //put your C code
               
                if(USART1String_flag)
                {
        
                        for(i=0;i<1024;i++){
                        
                                if((USART1_String[i]<0x20)||(USART1_String[i]>0x7e)) break;
                                
                        }
                        
                        CopyString(temp_String,USART1_String,i);
                        
                        SendArray(USART0,temp_String,i);
                        
                        ClearnString(USART1_String,1024);
                        
                        ClearnString(temp_String,1024);
                        
                }
               
               
                OSTimeDlyHMSM(0,0,0,20,OS_OPT_TIME_PERIODIC,&err);
        }
}


void led5_task(void *p_arg)
{
        OS_ERR err;
        p_arg = p_arg;
        
        while(1)
        {
               
                //put your C code
               
                OSTimeDlyHMSM(0,0,10,0,OS_OPT_TIME_PERIODIC,&err);
        }
}


void led6_task(void *p_arg)
{
        OS_ERR err;
        p_arg = p_arg;
        
        while(1)
        {
                //put your C code
               
                USART_RXD_Delay_cnt();
               
                OSTimeDlyHMSM(0,0,0,5,OS_OPT_TIME_PERIODIC,&err);
        }
}
123456789012345678901234567890123456789012345678901234567890
工程中创建了6个任务,两个LED任务,两个usart任务——USART0和USART1相互收发,可用串口助手调试



移植不易,打赏0.1元 QAQ,攒个护肝丸 x_x 谢谢


此部分内容已被设置为付费内容,您可以在支付 0.1 元 人民币后浏览本楼层全部付费内容点击购买




本楼层付费信息已有2人购买

7119660f42b1e08550.png (67.72 KB )

7119660f42b1e08550.png

4700360f42c1aaa9ce.png (61.08 KB )

4700360f42c1aaa9ce.png

9099860f42dc0d995d.png (28.08 KB )

9099860f42dc0d995d.png

4066360f42e2193608.png (28.67 KB )

4066360f42e2193608.png

9365260f42f475b074.png (202.96 KB )

9365260f42f475b074.png

5407060f43034cc228.png (40.87 KB )

5407060f43034cc228.png

5736660f4357cb59aa.png (25.79 KB )

5736660f4357cb59aa.png

使用特权

评论回复
沙发
zgp111|  楼主 | 2021-7-19 14:04 | 只看该作者

使用特权

评论回复
板凳
match007| | 2021-7-23 17:04 | 只看该作者
还没弄过,正在考虑替代ST

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

70

帖子

1

粉丝