2回答

0收藏

[原创] 3、GD32学习--CMSIS-RTOS RTX

GD32 GD32 6876 人阅读 | 2 人回复 | 2015-06-27





首先跑个RTOS吧,以前只用过RTX51-tiny  。。。第一次玩Cortex-M的。。。


以下内容是在上一篇的例子中做修改,:


选择RTX,如下:



图3-1:RTX




图3-2:RTX选择



main函数修改如下:
  1. #include "gd32f1x0.h"
  2. #include "gd32f1x0_gpio.h"
  3. #include "gd32f1x0_rcc.h"
  4. #include "cmsis_os.h"


  5. #define LED_ON  (1)
  6. #define LED_OFF (0)
  7. #define LED1    (1)
  8. #define LED2    (2)
  9. #define LED3    (3)
  10. #define LEDALL  (5)

  11. void EVB_LEDConfig(void)
  12. {
  13.     GPIO_InitPara GPIO_InitStructure;

  14.     RCC_AHBPeriphClock_Enable(RCC_AHBPERIPH_GPIOC,ENABLE);

  15.     GPIO_InitStructure.GPIO_Pin = GPIO_PIN_10|GPIO_PIN_11;
  16.     GPIO_InitStructure.GPIO_Mode = GPIO_MODE_OUT;
  17.     GPIO_InitStructure.GPIO_Speed = GPIO_SPEED_50MHZ;
  18.     GPIO_InitStructure.GPIO_OType = GPIO_OTYPE_PP;
  19.     GPIO_InitStructure.GPIO_PuPd = GPIO_PUPD_NOPULL;
  20.     GPIO_Init(GPIOC,&GPIO_InitStructure);

  21.     GPIO_ResetBits(GPIOC,GPIO_PIN_10|GPIO_PIN_11);
  22. }



  23. void EVB_LEDControl(int index, int cmd)
  24. {
  25.     switch (index)
  26.     {
  27.         case LED1:
  28.         {
  29.             if (cmd == LED_ON)
  30.             {
  31.                 GPIO_SetBits(GPIOC,GPIO_PIN_10);  
  32.             }
  33.             else
  34.             {
  35.                 GPIO_ResetBits(GPIOC,GPIO_PIN_10);
  36.             }
  37.             break;
  38.         }
  39.         case LED2:
  40.         {
  41.             if (cmd == LED_ON)
  42.             {
  43.                 GPIO_SetBits(GPIOC,GPIO_PIN_11);  
  44.             }
  45.             else
  46.             {
  47.                 GPIO_ResetBits(GPIOC,GPIO_PIN_11);
  48.             }
  49.             break;
  50.         }
  51.         default:
  52.         {
  53.             if (cmd == LED_ON)
  54.             {
  55.                 GPIO_ResetBits(GPIOC,GPIO_PIN_10|GPIO_PIN_11);

  56.             }
  57.             else
  58.             {
  59.                 GPIO_ResetBits(GPIOC,GPIO_PIN_10|GPIO_PIN_11);
  60.             }
  61.             break;
  62.         }
  63.     }
  64. }



  65. osThreadId tid_ledOn;                       /* Thread id of thread: ledOn    */
  66. osThreadId tid_ledOff;                      /* Thread id of thread: ledOff   */


  67. /*----------------------------------------------------------------------------
  68.   Thread 1 'ledOn': switches the LED on
  69. *---------------------------------------------------------------------------*/
  70. void ledOn (void const *argument) {
  71.   for (;;) {
  72.                 EVB_LEDControl(LED2, LED_OFF);
  73.     osDelay(100);
  74.     EVB_LEDControl(LED2, LED_ON);
  75.     osDelay(100);
  76.     osSignalSet(tid_ledOff, 0x0001);                        
  77.   }
  78. }

  79. /*----------------------------------------------------------------------------
  80.   Thread 2 'ledOff': switches the LED off
  81. *---------------------------------------------------------------------------*/
  82. void ledOff (void const *argument) {
  83.   for (;;) {
  84.    EVB_LEDControl(LED1, LED_OFF);
  85.     osDelay(200);
  86.     EVB_LEDControl(LED1, LED_ON);
  87.     osDelay(200);
  88.     osSignalSet(tid_ledOff, 0x0001);     
  89.         }
  90. }


  91. osThreadDef(ledOn,  osPriorityNormal, 1, 0);
  92. osThreadDef(ledOff, osPriorityNormal, 1, 0);

  93. int main(void)
  94. {
  95.     int i;

  96.     EVB_LEDConfig();
  97.           tid_ledOn  = osThreadCreate(osThread(ledOn) , NULL);
  98.     tid_ledOff = osThreadCreate(osThread(ledOff), NULL);

  99.     osSignalSet(tid_ledOn, 0x0001);          /* set signal to ledOn thread     */

  100.     osDelay(osWaitForever);
  101.     while(1);
  102.        
  103.        
  104.         /*  EVB_LEDControl(LED2, LED_OFF);
  105.           EVB_LEDControl(LED1, LED_OFF);
  106.     while(1)
  107.     {
  108.         for (i = 0; i< 0x0fffff; i++);
  109.                                         EVB_LEDControl(LED2, LED_ON);
  110.        
  111.         for (i = 0; i< 0x0fffff; i++);
  112.                                         EVB_LEDControl(LED2, LED_OFF);
  113.     }
  114.         */
  115. }
复制代码
关于RTX具体可以查看文档,是离线的。如下:



图3-3:RTX文档



程序如下:
Demo.rar (1.8 MB, 下载次数: 257)
分享到:
回复

使用道具 举报

回答|共 2 个

倒序浏览

沙发

wuwei_3009084

发表于 2015-6-29 09:49:37 | 只看该作者

多谢楼主分享
板凳

liunian__92

发表于 2015-6-29 17:10:52 | 只看该作者

wuwei_3009084 发表于 2015-6-29 09:49
多谢楼主分享

共同学习。。。。。。。。。。。
您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条