• CMSIS Example


      1 /*----------------------------------------------------------------------------
      2  *      RL-ARM - RTX
      3  *----------------------------------------------------------------------------
      4  *      Name:    RTX_EX2.C
      5  *      Purpose: RTX example program
      6  *----------------------------------------------------------------------------
      7  *
      8  * Copyright (c) 1999-2009 KEIL, 2009-2012 ARM Germany GmbH
      9  * All rights reserved.
     10  * Redistribution and use in source and binary forms, with or without
     11  * modification, are permitted provided that the following conditions are met:
     12  *  - Redistributions of source code must retain the above copyright
     13  *    notice, this list of conditions and the following disclaimer.
     14  *  - Redistributions in binary form must reproduce the above copyright
     15  *    notice, this list of conditions and the following disclaimer in the
     16  *    documentation and/or other materials provided with the distribution.
     17  *  - Neither the name of ARM  nor the names of its contributors may be used 
     18  *    to endorse or promote products derived from this software without 
     19  *    specific prior written permission.
     20  *
     21  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
     22  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
     23  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     24  * ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE
     25  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     26  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 
     27  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
     28  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
     29  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
     30  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     31  * POSSIBILITY OF SUCH DAMAGE.
     32  *---------------------------------------------------------------------------*/
     33 
     34 #include "cmsis_os.h"
     35 
     36 volatile uint16_t counter;            /* counter for main thread             */
     37 volatile uint16_t counter1;           /* counter for thread 1                */
     38 volatile uint16_t counter2;           /* counter for thread 2                */
     39 volatile uint16_t counter3;           /* counter for thread 3                */
     40 
     41 /* Thread IDs */
     42 osThreadId thread1_id;
     43 osThreadId thread2_id;
     44 osThreadId thread3_id;
     45 
     46 /* Forward reference */
     47 void job1 (void const *argument);
     48 void job2 (void const *argument);
     49 void job3 (void const *argument);
     50 
     51 /* Thread definitions */
     52 osThreadDef(job1, osPriorityAboveNormal, 1, 0);
     53 osThreadDef(job2, osPriorityNormal, 1, 0);
     54 osThreadDef(job3, osPriorityNormal, 1, 0);
     55 
     56 /*----------------------------------------------------------------------------
     57  *   Thread 1: 'job1'
     58  *---------------------------------------------------------------------------*/
     59 void job1 (void const *argument) {    /* higher priority to preempt job2     */
     60   while (1) {                         /* endless loop                        */
     61     counter1++;                       /* increment counter 1                 */
     62     osDelay(10);                      /* wait for timeout: 10ms              */
     63   }
     64 }
     65 
     66 /*----------------------------------------------------------------------------
     67  *   Thread 2: 'job2'
     68  *---------------------------------------------------------------------------*/
     69 void job2 (void const *argument) {
     70   while (1)  {                        /* endless loop                        */
     71     counter2++;                       /* increment counter 2                 */
     72     if (counter2 == 0) {              /* signal overflow of counter 2        */
     73       osSignalSet(thread3_id, 0x0001);/* to thread 3                         */
     74       osThreadYield();
     75     }
     76   }
     77 }
     78 
     79 /*----------------------------------------------------------------------------
     80  *   Thread 3: 'job3'
     81  *---------------------------------------------------------------------------*/
     82 void job3 (void const *argument) {
     83   while (1) {                         /* endless loop                        */
     84     osSignalWait(0x0001, osWaitForever);  /* wait for signal event           */
     85     counter3++;                       /* process overflow from counter 2     */
     86   }
     87 }
     88 
     89 /*----------------------------------------------------------------------------
     90  *   Main Thread
     91  *---------------------------------------------------------------------------*/
     92 int main (void) {                     /* program execution starts here       */
     93 
     94   /* Set higher priority of main thread to preempt job2                      */
     95   osThreadSetPriority(osThreadGetId(), osPriorityAboveNormal);
     96 
     97   thread1_id = osThreadCreate(osThread(job1),NULL);  /* create thread1       */
     98   thread2_id = osThreadCreate(osThread(job2),NULL);  /* create thread2       */
     99   thread3_id = osThreadCreate(osThread(job3),NULL);  /* create thread3       */
    100 
    101   while (1) {                         /* endless loop                        */
    102     counter++;                        /* increment counter                   */
    103     osDelay(5);                       /* wait for timeout: 5ms               */
    104   }
    105 }
    106 
    107 /*----------------------------------------------------------------------------
    108  * end of file
    109  *---------------------------------------------------------------------------*/
  • 相关阅读:
    Thread中带参方法无法使用之解决方案
    项目相关的风险要素及分类
    AspNetPager分页示例之DataGrid(PostBack分页)
    Substitution 类 (asp.net 2.0 )
    自定义HTTP处理程序显示图片(asp.net 2.0)
    常见文件扩展名和它们的说明
    基于.NET的开源GIS项目(转)
    项目开发流程标准
    AOP(Aspect Oriented Programming) 面向方面编程
    项目实施及管理标准
  • 原文地址:https://www.cnblogs.com/shangdawei/p/3854416.html
Copyright © 2020-2023  润新知