查看: 5762|回复: 2

[项目] 3、GD32学习--CMSIS-RTOS RTX

[复制链接]
  • TA的每日心情
    慵懒
    2016-10-17 12:07
  • 签到天数: 306 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2015-6-27 20:20:35 | 显示全部楼层 |阅读模式
    分享到:

    GD32_board_front.jpg



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


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


    选择RTX,如下:

    1选择RTX.jpg


    图3-1:RTX


    2-TRX.jpg


    图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-docs.jpg

    图3-3:RTX文档



    程序如下:
    Demo.rar (1.8 MB, 下载次数: 237)
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2013-12-17 13:39
  • 签到天数: 48 天

    连续签到: 1 天

    [LV.5]常住居民I

    发表于 2015-6-29 09:49:37 | 显示全部楼层
    多谢楼主分享
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2016-10-17 12:07
  • 签到天数: 306 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2015-6-29 17:10:52 | 显示全部楼层
    wuwei_3009084 发表于 2015-6-29 09:49
    多谢楼主分享

    共同学习。。。。。。。。。。。
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

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



    手机版|小黑屋|与非网

    GMT+8, 2024-4-20 16:38 , Processed in 0.125915 second(s), 20 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.