关于GD32F20x的uCOS_III移植例程

[复制链接]
5854|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
4037960f42b1e07478.png
2.下载uCOS_III源码,这个就没必要到官网下载了,到 (原子哥 || 火哥) 那
里白piao就是了,
5727160f42c1aaaa65.png

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

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

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

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

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

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


  1. int main(void)
  2. {
  3. OS_ERR err;
  4.         
  5.         CPU_SR_ALLOC();
  6.         
  7.         nvic_priority_group_set(NVIC_PRIGROUP_PRE2_SUB2);
  8.         
  9.         BSP_Init();
  10.                
  11.         Hardware_Init();
  12.         
  13.         OSInit(&err);
  14.         
  15.         OS_CRITICAL_ENTER();

  16.         OSTaskCreate((OS_TCB         * )&StartTaskTCB,
  17.                                  (CPU_CHAR        * )"start task",
  18.                  (OS_TASK_PTR )start_task,
  19.                  (void                * )0,
  20.                  (OS_PRIO          )START_TASK_PRIO,
  21.                  (CPU_STK   * )&START_TASK_STK[0],
  22.                  (CPU_STK_SIZE)START_STK_SIZE/10,
  23.                  (CPU_STK_SIZE)START_STK_SIZE,
  24.                  (OS_MSG_QTY  )0,
  25.                  (OS_TICK          )0,
  26.                  (void           * )0,
  27.                  (OS_OPT      )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,
  28.                  (OS_ERR         * )&err);
  29.         OS_CRITICAL_EXIT();
  30.         OSStart(&err);
  31.         while(1);
  32. }


  33. void start_task(void *p_arg)
  34. {
  35.         OS_ERR err;
  36.         
  37.         CPU_SR_ALLOC();
  38.         
  39.         p_arg = p_arg;
  40.         
  41.         CPU_Init();

  42.         Mem_Init();  
  43.         
  44. #if OS_CFG_STAT_TASK_EN > 0u
  45.         
  46.    OSStatTaskCPUUsageInit(&err);
  47.         
  48. #endif
  49.         
  50. #ifdef CPU_CFG_INT_DIS_MEAS_EN
  51.         
  52.     CPU_IntDisMeasMaxCurReset();        
  53.         
  54. #endif
  55.         
  56. #if        OS_CFG_SCHED_ROUND_ROBIN_EN
  57.         
  58.         OSSchedRoundRobinCfg(DEF_ENABLED,1,&err);  
  59.         
  60. #endif               
  61.         
  62.         OS_CRITICAL_ENTER();
  63.                                  

  64.         OSTaskCreate((OS_TCB         * )&Led1TaskTCB,               
  65.                                  (CPU_CHAR        * )"led1 task",                 
  66.                  (OS_TASK_PTR )led1_task,                        
  67.                  (void                * )0,                                       
  68.                  (OS_PRIO          )LED1_TASK_PRIO,            
  69.                  (CPU_STK   * )&LED1_TASK_STK[0],        
  70.                  (CPU_STK_SIZE)LED1_STK_SIZE/10,        
  71.                  (CPU_STK_SIZE)LED1_STK_SIZE,               
  72.                  (OS_MSG_QTY  )0,                                       
  73.                  (OS_TICK          )0,                                       
  74.                  (void           * )0,                                
  75.                  (OS_OPT      )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,
  76.                  (OS_ERR         * )&err);
  77.                                                                  
  78.         OSTaskCreate((OS_TCB         * )&Led2TaskTCB,               
  79.                                  (CPU_CHAR        * )"led2 task",                 
  80.                  (OS_TASK_PTR )led2_task,                        
  81.                  (void                * )0,                                       
  82.                  (OS_PRIO          )LED2_TASK_PRIO,            
  83.                  (CPU_STK   * )&LED2_TASK_STK[0],        
  84.                  (CPU_STK_SIZE)LED2_STK_SIZE/10,        
  85.                  (CPU_STK_SIZE)LED2_STK_SIZE,               
  86.                  (OS_MSG_QTY  )0,                                       
  87.                  (OS_TICK          )0,                                       
  88.                  (void           * )0,                                
  89.                  (OS_OPT      )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,
  90.                  (OS_ERR         * )&err);
  91.                                                                  
  92.         OSTaskCreate((OS_TCB         * )&Led3TaskTCB,               
  93.                                  (CPU_CHAR        * )"led3 task",                 
  94.                  (OS_TASK_PTR )led3_task,                        
  95.                  (void                * )0,                                       
  96.                  (OS_PRIO          )LED3_TASK_PRIO,            
  97.                  (CPU_STK   * )&LED3_TASK_STK[0],        
  98.                  (CPU_STK_SIZE)LED3_STK_SIZE/10,        
  99.                  (CPU_STK_SIZE)LED3_STK_SIZE,               
  100.                  (OS_MSG_QTY  )0,                                       
  101.                  (OS_TICK          )0,                                       
  102.                  (void           * )0,                                
  103.                  (OS_OPT      )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,
  104.                  (OS_ERR         * )&err);
  105.                                                                  
  106.         OSTaskCreate((OS_TCB         * )&Led4TaskTCB,               
  107.                                  (CPU_CHAR        * )"led4 task",                 
  108.                  (OS_TASK_PTR )led4_task,                        
  109.                  (void                * )0,                                       
  110.                  (OS_PRIO          )LED4_TASK_PRIO,            
  111.                  (CPU_STK   * )&LED4_TASK_STK[0],        
  112.                  (CPU_STK_SIZE)LED4_STK_SIZE/10,        
  113.                  (CPU_STK_SIZE)LED4_STK_SIZE,               
  114.                  (OS_MSG_QTY  )0,                                       
  115.                  (OS_TICK          )0,                                       
  116.                  (void           * )0,                                
  117.                  (OS_OPT      )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,
  118.                  (OS_ERR         * )&err);
  119.                                                                  
  120.         OSTaskCreate((OS_TCB         * )&Led5TaskTCB,               
  121.                                  (CPU_CHAR        * )"led5 task",                 
  122.                  (OS_TASK_PTR )led5_task,                        
  123.                  (void                * )0,                                       
  124.                  (OS_PRIO          )LED5_TASK_PRIO,            
  125.                  (CPU_STK   * )&LED5_TASK_STK[0],        
  126.                  (CPU_STK_SIZE)LED5_STK_SIZE/10,        
  127.                  (CPU_STK_SIZE)LED5_STK_SIZE,               
  128.                  (OS_MSG_QTY  )0,                                       
  129.                  (OS_TICK          )0,                                       
  130.                  (void           * )0,                                
  131.                  (OS_OPT      )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,
  132.                  (OS_ERR         * )&err);
  133.                                                                  
  134.         OSTaskCreate((OS_TCB         * )&Led6TaskTCB,               
  135.                                  (CPU_CHAR        * )"led6 task",                 
  136.                  (OS_TASK_PTR )led6_task,                        
  137.                  (void                * )0,                                       
  138.                  (OS_PRIO          )LED6_TASK_PRIO,            
  139.                  (CPU_STK   * )&LED6_TASK_STK[0],        
  140.                  (CPU_STK_SIZE)LED6_STK_SIZE/10,        
  141.                  (CPU_STK_SIZE)LED6_STK_SIZE,               
  142.                  (OS_MSG_QTY  )0,                                       
  143.                  (OS_TICK          )0,                                       
  144.                  (void           * )0,                                
  145.                  (OS_OPT      )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,
  146.                  (OS_ERR         * )&err);

  147.         OS_TaskSuspend((OS_TCB*)&StartTaskTCB,&err);
  148.                                                                  
  149.         OS_CRITICAL_EXIT();
  150.                                                                  
  151. }


  152. void led1_task(void *p_arg)
  153. {
  154.         OS_ERR err;
  155.         p_arg = p_arg;
  156.         while(1)
  157.         {
  158.                 //put your C code
  159.                
  160.                 LED1_TOGGLE();
  161.                
  162.                 OSTimeDlyHMSM(0,0,0,900,OS_OPT_TIME_PERIODIC,&err);
  163.                
  164.                 LED1_TOGGLE();
  165.                
  166.                 OSTimeDlyHMSM(0,0,0,100,OS_OPT_TIME_PERIODIC,&err);
  167.         }
  168. }


  169. void led2_task(void *p_arg)
  170. {
  171.         OS_ERR err;
  172.         p_arg = p_arg;
  173.         while(1)
  174.         {
  175.                 //put your C code
  176.                
  177.                 LED2_TOGGLE();
  178.                
  179.                 OSTimeDlyHMSM(0,0,0,400,OS_OPT_TIME_PERIODIC,&err);
  180.                
  181.                 LED2_TOGGLE();
  182.                
  183.                 OSTimeDlyHMSM(0,0,0,100,OS_OPT_TIME_PERIODIC,&err);
  184.         }
  185. }

  186. uint8_t temp_String[1024];

  187. void led3_task(void *p_arg)
  188. {
  189.         uint16_t i;
  190.         
  191.         OS_ERR err;
  192.         p_arg = p_arg;
  193.         
  194.         while(1)
  195.         {
  196.                 //put your C code
  197.                
  198.                 if(USART0String_flag)
  199.                 {
  200.         
  201.                         for(i=0;i<1024;i++){
  202.                         
  203.                                 if((USART0_String[i]<0x20)||(USART0_String[i]>0x7e)) break;
  204.                                 
  205.                         }
  206.                         
  207.                         CopyString(temp_String,USART0_String,i);
  208.                         
  209.                         SendArray(USART1,temp_String,i);
  210.                         
  211.                         ClearnString(USART0_String,1024);
  212.                         
  213.                         ClearnString(temp_String,1024);
  214.                         
  215.                 }
  216.                
  217.                 OSTimeDlyHMSM(0,0,0,20,OS_OPT_TIME_PERIODIC,&err);
  218.         }
  219. }


  220. void led4_task(void *p_arg)
  221. {
  222.         
  223.         uint16_t i;
  224.         
  225.         OS_ERR err;
  226.         p_arg = p_arg;
  227.         
  228.         while(1)
  229.         {
  230.                 //put your C code
  231.                
  232.                 if(USART1String_flag)
  233.                 {
  234.         
  235.                         for(i=0;i<1024;i++){
  236.                         
  237.                                 if((USART1_String[i]<0x20)||(USART1_String[i]>0x7e)) break;
  238.                                 
  239.                         }
  240.                         
  241.                         CopyString(temp_String,USART1_String,i);
  242.                         
  243.                         SendArray(USART0,temp_String,i);
  244.                         
  245.                         ClearnString(USART1_String,1024);
  246.                         
  247.                         ClearnString(temp_String,1024);
  248.                         
  249.                 }
  250.                
  251.                
  252.                 OSTimeDlyHMSM(0,0,0,20,OS_OPT_TIME_PERIODIC,&err);
  253.         }
  254. }


  255. void led5_task(void *p_arg)
  256. {
  257.         OS_ERR err;
  258.         p_arg = p_arg;
  259.         
  260.         while(1)
  261.         {
  262.                
  263.                 //put your C code
  264.                
  265.                 OSTimeDlyHMSM(0,0,10,0,OS_OPT_TIME_PERIODIC,&err);
  266.         }
  267. }


  268. void led6_task(void *p_arg)
  269. {
  270.         OS_ERR err;
  271.         p_arg = p_arg;
  272.         
  273.         while(1)
  274.         {
  275.                 //put your C code
  276.                
  277.                 USART_RXD_Delay_cnt();
  278.                
  279.                 OSTimeDlyHMSM(0,0,0,5,OS_OPT_TIME_PERIODIC,&err);
  280.         }
  281. }
123456789012345678901234567890123456789012345678901234567890
工程中创建了6个任务,两个LED任务,两个usart任务——USART0和USART1相互收发,可用串口助手调试

4161160f4357cb5822.png

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

,[payamount]0.10[/payamount]
[pay] 1_GD32F20x_uCOS-III.rar (8.41 MB, 下载次数: 6) [/pay]



7119660f42b1e08550.png
4700360f42c1aaa9ce.png
9099860f42dc0d995d.png
4066360f42e2193608.png
9365260f42f475b074.png
5407060f43034cc228.png
5736660f4357cb59aa.png
 楼主| zgp111 发表于 2021-7-19 14:04 | 显示全部楼层
match007 发表于 2021-7-23 17:04 | 显示全部楼层
还没弄过,正在考虑替代ST
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

71

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部