⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 blockq.lst

📁 MSP430 IAR project with FreeRTOS port.
💻 LST
📖 第 1 页 / 共 3 页
字号:
##############################################################################
#                                                                            #
# IAR MSP430 C/C++ Compiler V3.41A/W32                 22/Apr/2006  00:25:12 #
# Copyright 1996-2006 IAR Systems. All rights reserved.                      #
#                                                                            #
#    __rt_version  =  2                                                      #
#    __double_size =  32                                                     #
#    __reg_r4      =  free                                                   #
#    __reg_r5      =  free                                                   #
#    __pic         =  no                                                     #
#    __core        =  64kb                                                   #
#    Source file   =  C:\MSP430F169_Eval_Port\FreeRTOSv401\Demo\Common\Minim #
#                     al\BlockQ.c                                            #
#    Command line  =  C:\MSP430F169_Eval_Port\FreeRTOSv401\Demo\Common\Minim #
#                     al\BlockQ.c -D ROWLEY_MSP430 -D IAR_MSP430 -lC         #
#                     C:\MSP430F169_Eval_Port\FreeRTOSv401\Debug\List\ -lA   #
#                     C:\MSP430F169_Eval_Port\FreeRTOSv401\Debug\List\       #
#                     --remarks -o C:\MSP430F169_Eval_Port\FreeRTOSv401\Debu #
#                     g\Obj\ -s2 --no_cse --no_unroll --no_inline            #
#                     --no_code_motion --no_tbaa --debug -e                  #
#                     --migration_preprocessor_extensions --double=32 -I     #
#                     C:\MSP430F169_Eval_Port\FreeRTOSv401\Demo\Common\Inclu #
#                     de\ -I C:\MSP430F169_Eval_Port\FreeRTOSv401\Source\Inc #
#                     lude\ -I C:\MSP430F169_Eval_Port\FreeRTOSv401\Demo\MSP #
#                     430_IAR\ -I C:\MSP430F169_Eval_Port\FreeRTOSv401\Sourc #
#                     e\portable\msp430f1611\ -I "C:\Program Files\IAR       #
#                     Systems\Embedded Workbench 4.0\430\INC\" -I            #
#                     "C:\Program Files\IAR Systems\Embedded Workbench       #
#                     4.0\430\INC\CLIB\"                                     #
#    List file     =  C:\MSP430F169_Eval_Port\FreeRTOSv401\Debug\List\BlockQ #
#                     .lst                                                   #
#    Object file   =  C:\MSP430F169_Eval_Port\FreeRTOSv401\Debug\Obj\BlockQ. #
#                     r43                                                    #
#                                                                            #
#                                                                            #
##############################################################################

C:\MSP430F169_Eval_Port\FreeRTOSv401\Demo\Common\Minimal\BlockQ.c
      1          /*
      2          	FreeRTOS V4.0.1 - Copyright (C) 2003-2006 Richard Barry.
      3          
      4          	This file is part of the FreeRTOS distribution.
      5          
      6          	FreeRTOS is free software; you can redistribute it and/or modify
      7          	it under the terms of the GNU General Public License as published by
      8          	the Free Software Foundation; either version 2 of the License, or
      9          	(at your option) any later version.
     10          
     11          	FreeRTOS is distributed in the hope that it will be useful,
     12          	but WITHOUT ANY WARRANTY; without even the implied warranty of
     13          	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     14          	GNU General Public License for more details.
     15          
     16          	You should have received a copy of the GNU General Public License
     17          	along with FreeRTOS; if not, write to the Free Software
     18          	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
     19          
     20          	A special exception to the GPL can be applied should you wish to distribute
     21          	a combined work that includes FreeRTOS, without being obliged to provide
     22          	the source code for any proprietary components.  See the licensing section
     23          	of http://www.FreeRTOS.org for full details of how and when the exception
     24          	can be applied.
     25          
     26          	***************************************************************************
     27          	See http://www.FreeRTOS.org for documentation, latest information, license
     28          	and contact details.  Please ensure to read the configuration and relevant
     29          	port sections of the online documentation.
     30          	***************************************************************************
     31          */
     32          
     33          /*
     34           * Creates six tasks that operate on three queues as follows:
     35           *
     36           * The first two tasks send and receive an incrementing number to/from a queue.
     37           * One task acts as a producer and the other as the consumer.  The consumer is a
     38           * higher priority than the producer and is set to block on queue reads.  The queue
     39           * only has space for one item - as soon as the producer posts a message on the
     40           * queue the consumer will unblock, pre-empt the producer, and remove the item.
     41           *
     42           * The second two tasks work the other way around.  Again the queue used only has
     43           * enough space for one item.  This time the consumer has a lower priority than the
     44           * producer.  The producer will try to post on the queue blocking when the queue is
     45           * full.  When the consumer wakes it will remove the item from the queue, causing
     46           * the producer to unblock, pre-empt the consumer, and immediately re-fill the
     47           * queue.
     48           *
     49           * The last two tasks use the same queue producer and consumer functions.  This time the queue has
     50           * enough space for lots of items and the tasks operate at the same priority.  The
     51           * producer will execute, placing items into the queue.  The consumer will start
     52           * executing when either the queue becomes full (causing the producer to block) or
     53           * a context switch occurs (tasks of the same priority will time slice).
     54           *
     55           */
     56          
     57          
     58          
     59          #include <stdlib.h>
     60          
     61          /* Scheduler include files. */
     62          #include "FreeRTOS.h"
     63          #include "task.h"
     64          #include "queue.h"
     65          
     66          /* Demo program include files. */
     67          #include "BlockQ.h"
     68          
     69          #define blckqSTACK_SIZE		configMINIMAL_STACK_SIZE
     70          #define blckqNUM_TASK_SETS	( 3 )
     71          
     72          /* Structure used to pass parameters to the blocking queue tasks. */
     73          typedef struct BLOCKING_QUEUE_PARAMETERS
     74          {
     75          	xQueueHandle xQueue;					/*< The queue to be used by the task. */
     76          	portTickType xBlockTime;				/*< The block time to use on queue reads/writes. */
     77          	volatile portSHORT *psCheckVariable;	/*< Incremented on each successful cycle to check the task is still running. */
     78          } xBlockingQueueParameters;
     79          
     80          /* Task function that creates an incrementing number and posts it on a queue. */
     81          static portTASK_FUNCTION_PROTO( vBlockingQueueProducer, pvParameters );
     82          
     83          /* Task function that removes the incrementing number from a queue and checks that
     84          it is the expected number. */
     85          static portTASK_FUNCTION_PROTO( vBlockingQueueConsumer, pvParameters );
     86          
     87          /* Variables which are incremented each time an item is removed from a queue, and
     88          found to be the expected value.
     89          These are used to check that the tasks are still running. */

   \                                 In segment DATA16_Z, align 2, align-sorted
   \   000000                REQUIRE ?cstart_init_zero
     90          static volatile portSHORT sBlockingConsumerCount[ blckqNUM_TASK_SETS ] = { ( unsigned portSHORT ) 0, ( unsigned portSHORT ) 0, ( unsigned portSHORT ) 0 };
   \                     sBlockingConsumerCount:
   \   000000                DS8 6
     91          
     92          /* Variable which are incremented each time an item is posted on a queue.   These
     93          are used to check that the tasks are still running. */

   \                                 In segment DATA16_Z, align 2, align-sorted
   \   000000                REQUIRE ?cstart_init_zero
     94          static volatile portSHORT sBlockingProducerCount[ blckqNUM_TASK_SETS ] = { ( unsigned portSHORT ) 0, ( unsigned portSHORT ) 0, ( unsigned portSHORT ) 0 };
   \                     sBlockingProducerCount:
   \   000000                DS8 6
     95          
     96          /*-----------------------------------------------------------*/
     97          

   \                                 In segment CODE, align 2
     98          void vStartBlockingQueueTasks( unsigned portBASE_TYPE uxPriority )
   \                     vStartBlockingQueueTasks:
     99          {
   \   000000   0A12         PUSH.W  R10
   \   000002   0B12         PUSH.W  R11
   \   000004   0812         PUSH.W  R8
   \   000006   0912         PUSH.W  R9
   \   000008   0612         PUSH.W  R6
   \   00000A   0712         PUSH.W  R7
   \   00000C   0412         PUSH.W  R4
   \   00000E   0512         PUSH.W  R5
   \   000010   0C12         PUSH.W  R12
   \   000012   2182         SUB.W   #0x4, SP
    100          xBlockingQueueParameters *pxQueueParameters1, *pxQueueParameters2;
    101          xBlockingQueueParameters *pxQueueParameters3, *pxQueueParameters4;
    102          xBlockingQueueParameters *pxQueueParameters5, *pxQueueParameters6;
    103          const unsigned portBASE_TYPE uxQueueSize1 = 1, uxQueueSize5 = 5;
   \   000014   91430000     MOV.W   #0x1, 0x0(SP)
   \   000018   B14005000200 MOV.W   #0x5, 0x2(SP)
    104          const portTickType xBlockTime = ( portTickType ) 1000 / portTICK_RATE_MS;
   \   00001E   3440E803     MOV.W   #0x3e8, R4
    105          const portTickType xDontBlock = ( portTickType ) 0;
   \   000022   0543         MOV.W   #0x0, R5
    106          
    107          	/* Create the first two tasks as described at the top of the file. */
    108          	
    109          	/* First create the structure used to pass parameters to the consumer tasks. */
    110          	pxQueueParameters1 = ( xBlockingQueueParameters * ) pvPortMalloc( sizeof( xBlockingQueueParameters ) );
   \   000024   3C400600     MOV.W   #0x6, R12
   \   000028   B012....     CALL    #pvPortMalloc
   \   00002C   0A4C         MOV.W   R12, R10
    111          
    112          	/* Create the queue used by the first two tasks to pass the incrementing number.
    113          	Pass a pointer to the queue in the parameter structure. */
    114          	pxQueueParameters1->xQueue = xQueueCreate( uxQueueSize1, ( unsigned portBASE_TYPE ) sizeof( unsigned portSHORT ) );
   \   00002E   2E43         MOV.W   #0x2, R14
   \   000030   2C41         MOV.W   0x0(SP), R12
   \   000032   B012....     CALL    #xQueueCreate
   \   000036   8A4C0000     MOV.W   R12, 0(R10)
    115          
    116          	/* The consumer is created first so gets a block time as described above. */
    117          	pxQueueParameters1->xBlockTime = xBlockTime;
   \   00003A   8A440200     MOV.W   R4, 0x2(R10)
    118          
    119          	/* Pass in the variable that this task is going to increment so we can check it
    120          	is still running. */
    121          	pxQueueParameters1->psCheckVariable = &( sBlockingConsumerCount[ 0 ] );
   \   00003E   BA40....0400 MOV.W   #sBlockingConsumerCount, 0x4(R10)
    122          		
    123          	/* Create the structure used to pass parameters to the producer task. */
    124          	pxQueueParameters2 = ( xBlockingQueueParameters * ) pvPortMalloc( sizeof( xBlockingQueueParameters ) );
   \   000044   3C400600     MOV.W   #0x6, R12
   \   000048   B012....     CALL    #pvPortMalloc
   \   00004C   0B4C         MOV.W   R12, R11
    125          
    126          	/* Pass the queue to this task also, using the parameter structure. */
    127          	pxQueueParameters2->xQueue = pxQueueParameters1->xQueue;
   \   00004E   AB4A0000     MOV.W   @R10, 0(R11)
    128          
    129          	/* The producer is not going to block - as soon as it posts the consumer will
    130          	wake and remove the item so the producer should always have room to post. */
    131          	pxQueueParameters2->xBlockTime = xDontBlock;
   \   000052   8B450200     MOV.W   R5, 0x2(R11)
    132          
    133          	/* Pass in the variable that this task is going to increment so we can check
    134          	it is still running. */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -