# vTaskDelayUntil not working with mega128

**URL:** <https://forums.freertos.org/t/vtaskdelayuntil-not-working-with-mega128/2977>\
**Category:** Kernel\
**Created:** [March 15, 2007, 2:05pm UTC](https://forums.freertos.org/t/vtaskdelayuntil-not-working-with-mega128/2977 "2007-03-15T14:05:08Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![system](https://d2v6vdsk2p900z.cloudfront.net/original/1X/7fc8fdb729c645aab5b20282bbe34e57cb407be6.jpeg) [@system](https://forums.freertos.org/u/system)\
**Post date:** [March 15, 2007, 2:05pm UTC](https://forums.freertos.org/t/vtaskdelayuntil-not-working-with-mega128/2977/1 "2007-03-15T14:05:08Z")

</div>

**nobody** wrote on [Thursday, March 15, 2007](https://sourceforge.net/p/freertos/discussion/382005/thread/83de552e/#f123):

hi  
I implemented a simple code, with a single task . The program control is lost when it reaches vTaskDelayUntil. If simple delay (using for loop) is used the program works fine .

I have changed from mega323 to mega128 in make file  
settings in FreeRtosConfig.h are  
#define configUSE\_PREEMPTION&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1  
#define configUSE\_IDLE\_HOOK&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0  
#define configUSE\_TICK\_HOOK&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0  
#define configCPU\_CLOCK\_HZ&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ( ( unsigned portLONG ) 8000000 )  
#define configTICK\_RATE\_HZ&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ( ( portTickType ) 1000 )  
#define configMAX\_PRIORITIES&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ( ( unsigned portBASE\_TYPE ) 4 )  
#define configMINIMAL\_STACK\_SIZE&nbsp;&nbsp;&nbsp; ( ( unsigned portSHORT ) 85 )  
#define configTOTAL\_HEAP\_SIZE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ( (size\_t ) ( 2500 ) )  
#define configMAX\_TASK\_NAME\_LEN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ( 8 )  
#define configUSE\_TRACE\_FACILITY&nbsp;&nbsp;&nbsp; 0  
#define configUSE\_16\_BIT\_TICKS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1  
#define configIDLE\_SHOULD\_YIELD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1

---

<div class="post-metadata">

**Author:** ![system](https://d2v6vdsk2p900z.cloudfront.net/original/1X/7fc8fdb729c645aab5b20282bbe34e57cb407be6.jpeg) [@system](https://forums.freertos.org/u/system)\
**Post date:** [April 12, 2007, 6:54am UTC](https://forums.freertos.org/t/vtaskdelayuntil-not-working-with-mega128/2977/2 "2007-04-12T06:54:37Z")

</div>

**nobody** wrote on [Thursday, April 12, 2007](https://sourceforge.net/p/freertos/discussion/382005/thread/83de552e/#f123/c544):

I also have the same problem with an ATMEGA162!!! It works fine on my ATMEGA16, I use vTaskDelay and also vTaskDelayUntil, but when I try this on ATMEGA162, it never comes again, after the call to this functions! If anyone has identified the problem, please let us know!

---

<div class="post-metadata">

**Author:** ![system](https://d2v6vdsk2p900z.cloudfront.net/original/1X/7fc8fdb729c645aab5b20282bbe34e57cb407be6.jpeg) [@system](https://forums.freertos.org/u/system)\
**Post date:** [April 12, 2007, 8:40am UTC](https://forums.freertos.org/t/vtaskdelayuntil-not-working-with-mega128/2977/3 "2007-04-12T08:40:39Z")

</div>

**[embeddedc](https://sourceforge.net/u/embeddedc/)** wrote on [Thursday, April 12, 2007](https://sourceforge.net/p/freertos/discussion/382005/thread/83de552e/#f123/c544/1744):

I’m not too familiar with the AVR, but having had a quick look at the two devices (16 and 162) there seems to be little difference.&nbsp; The 162 does have more timers through.&nbsp; Is it possible that the timer setup used on the 16 is not compatible with the 162 and the tick is not running?&nbsp; If you have a good debugger then try setting a break point in the tick interrupt.&nbsp; If you cannot do this then try writing a tick hook function that toggles and LED every 1000 ticks.&nbsp; If this does not work then maybe the timer interrupt is not running and this is the source of your problem?

---

<div class="post-metadata">

**Author:** ![system](https://d2v6vdsk2p900z.cloudfront.net/original/1X/7fc8fdb729c645aab5b20282bbe34e57cb407be6.jpeg) [@system](https://forums.freertos.org/u/system)\
**Post date:** [April 13, 2007, 4:38am UTC](https://forums.freertos.org/t/vtaskdelayuntil-not-working-with-mega128/2977/4 "2007-04-13T04:38:58Z")

</div>

**nobody** wrote on [Friday, April 13, 2007](https://sourceforge.net/p/freertos/discussion/382005/thread/83de552e/#f123/965e):

Hi, thanks for your respond. You´re right, I thought I had configured the timer, but there are some changes in the TIMSK register between the ATMEGA16 and the ATMEGA162 I didnt noticed! The other timer registers seem to be the same. Well, it works now for me. Here´s the code, modified for use of timer2 instead of timer1 (I need two counters for my application, and timer3 is already busy!), it´s working good.

/\*  
&nbsp;&nbsp;&nbsp; [FreeRTOS.org](http://FreeRTOS.org) V4.1.3 - Copyright (C) 2003-2006 Richard Barry.

&nbsp;&nbsp;&nbsp; This file is part of the [FreeRTOS.org](http://FreeRTOS.org) distribution.

&nbsp;&nbsp;&nbsp; [FreeRTOS.org](http://FreeRTOS.org) is free software; you can redistribute it and/or modify  
&nbsp;&nbsp;&nbsp; it under the terms of the GNU General Public License as published by  
&nbsp;&nbsp;&nbsp; the Free Software Foundation; either version 2 of the License, or  
&nbsp;&nbsp;&nbsp; (at your option) any later version.

&nbsp;&nbsp;&nbsp; [FreeRTOS.org](http://FreeRTOS.org) is distributed in the hope that it will be useful,  
&nbsp;&nbsp;&nbsp; but WITHOUT ANY WARRANTY; without even the implied warranty of  
&nbsp;&nbsp;&nbsp; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.&nbsp; See the  
&nbsp;&nbsp;&nbsp; GNU General Public License for more details.

&nbsp;&nbsp;&nbsp; You should have received a copy of the GNU General Public License  
&nbsp;&nbsp;&nbsp; along with [FreeRTOS.org](http://FreeRTOS.org); if not, write to the Free Software  
&nbsp;&nbsp;&nbsp; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA&nbsp; 02111-1307&nbsp; USA

&nbsp;&nbsp;&nbsp; A special exception to the GPL can be applied should you wish to distribute  
&nbsp;&nbsp;&nbsp; a combined work that includes [FreeRTOS.org](http://FreeRTOS.org), without being obliged to provide  
&nbsp;&nbsp;&nbsp; the source code for any proprietary components.&nbsp; See the licensing section  
&nbsp;&nbsp;&nbsp; of [http://www.FreeRTOS.org](http://www.FreeRTOS.org) for full details of how and when the exception  
&nbsp;&nbsp;&nbsp; can be applied.

&nbsp;&nbsp;&nbsp; \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*  
&nbsp;&nbsp;&nbsp; See [http://www.FreeRTOS.org](http://www.FreeRTOS.org) for documentation, latest information, license  
&nbsp;&nbsp;&nbsp; and contact details.&nbsp; Please ensure to read the configuration and relevant  
&nbsp;&nbsp;&nbsp; port sections of the online documentation.  
&nbsp;&nbsp;&nbsp; \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*  
\*/

/\*

Changes from V2.6.0

&nbsp;&nbsp;&nbsp; + AVR port - Replaced the inb() and outb() functions with direct memory  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; access.&nbsp; This allows the port to be built with the 20050414 build of  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WinAVR.  
\*/

/\*  
PUSTOWKA  
Changes  
&nbsp;&nbsp;&nbsp; this port is using timer2 instead of timer1, and it is modified,&nbsp; for  
&nbsp;&nbsp;&nbsp; the use with ATMEGA162. see below for further indications!

\*/  
#include \<stdlib.h\>  
#include \<avr/interrupt.h\>

#include "FreeRTOS.h"  
#include "task.h"

/\*-----------------------------------------------------------  
\* Implementation of functions defined in portable.h for the AVR port.  
\*----------------------------------------------------------\*/

/\* Start tasks with interrupts enables. \*/  
#define portFLAGS\_INT\_ENABLED&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ( ( portSTACK\_TYPE ) 0x80 )

/\* Hardware constants for timer 1. \*/  
#define portCLEAR\_COUNTER\_ON\_MATCH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ( ( unsigned portCHAR ) 0x08 )  
#define portPRESCALE\_64&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ( ( unsigned portCHAR ) 0x04 )  
#define portCLOCK\_PRESCALER&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ( ( unsigned portLONG ) 64 )  
#define portCOMPARE\_MATCH\_A\_INTERRUPT\_ENABLE&nbsp;&nbsp;&nbsp; ( ( unsigned portCHAR ) 0x10 )

/\*-----------------------------------------------------------\*/

/\* We require the address of the pxCurrentTCB variable, but don’t want to know  
any details of its type. \*/  
typedef void tskTCB;  
extern volatile tskTCB \* volatile pxCurrentTCB;

/\*-----------------------------------------------------------\*/

/\*  
\* Macro to save all the general purpose registers, the save the stack pointer  
\* into the TCB.&nbsp;  
\*  
\* The first thing we do is save the flags then disable interrupts.&nbsp; This is to  
\* guard our stack against having a context switch interrupt after we have already  
\* pushed the registers onto the stack - causing the 32 registers to be on the  
\* stack twice.  
\*  
\* r1 is set to zero as the compiler expects it to be thus, however some  
\* of the math routines make use of R1.  
\*  
\* The interrupts will have been disabled during the call to portSAVE\_CONTEXT()  
\* so we need not worry about reading/writing to the stack pointer.  
\*/

#define portSAVE\_CONTEXT()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp; asm volatile (&nbsp;&nbsp;&nbsp; "push&nbsp;&nbsp;&nbsp; r0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "in&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r0, \_\_SREG\_\_&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "cli&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "push&nbsp;&nbsp;&nbsp; r0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "push&nbsp;&nbsp;&nbsp; r1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "clr&nbsp;&nbsp;&nbsp; r1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "push&nbsp;&nbsp;&nbsp; r2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "push&nbsp;&nbsp;&nbsp; r3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "push&nbsp;&nbsp;&nbsp; r4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "push&nbsp;&nbsp;&nbsp; r5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "push&nbsp;&nbsp;&nbsp; r6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "push&nbsp;&nbsp;&nbsp; r7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "push&nbsp;&nbsp;&nbsp; r8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "push&nbsp;&nbsp;&nbsp; r9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "push&nbsp;&nbsp;&nbsp; r10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "push&nbsp;&nbsp;&nbsp; r11&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "push&nbsp;&nbsp;&nbsp; r12&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "push&nbsp;&nbsp;&nbsp; r13&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "push&nbsp;&nbsp;&nbsp; r14&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "push&nbsp;&nbsp;&nbsp; r15&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "push&nbsp;&nbsp;&nbsp; r16&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "push&nbsp;&nbsp;&nbsp; r17&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "push&nbsp;&nbsp;&nbsp; r18&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "push&nbsp;&nbsp;&nbsp; r19&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "push&nbsp;&nbsp;&nbsp; r20&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "push&nbsp;&nbsp;&nbsp; r21&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "push&nbsp;&nbsp;&nbsp; r22&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "push&nbsp;&nbsp;&nbsp; r23&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "push&nbsp;&nbsp;&nbsp; r24&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "push&nbsp;&nbsp;&nbsp; r25&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "push&nbsp;&nbsp;&nbsp; r26&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "push&nbsp;&nbsp;&nbsp; r27&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "push&nbsp;&nbsp;&nbsp; r28&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "push&nbsp;&nbsp;&nbsp; r29&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "push&nbsp;&nbsp;&nbsp; r30&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "push&nbsp;&nbsp;&nbsp; r31&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "lds&nbsp;&nbsp;&nbsp; r26, pxCurrentTCB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "lds&nbsp;&nbsp;&nbsp; r27, pxCurrentTCB + 1&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "in&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r0, 0x3d&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "st&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x+, r0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "in&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r0, 0x3e&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "st&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x+, r0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; );

/\*  
\* Opposite to portSAVE\_CONTEXT().&nbsp; Interrupts will have been disabled during  
\* the context save so we can write to the stack pointer.  
\*/

#define portRESTORE\_CONTEXT()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp; asm volatile (&nbsp;&nbsp;&nbsp; "lds&nbsp;&nbsp;&nbsp; r26, pxCurrentTCB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "lds&nbsp;&nbsp;&nbsp; r27, pxCurrentTCB + 1&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "ld&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r28, x+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "out&nbsp;&nbsp;&nbsp; \_\_SP\_L\_\_, r28&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "ld&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r29, x+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "out&nbsp;&nbsp;&nbsp; \_\_SP\_H\_\_, r29&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "pop&nbsp;&nbsp;&nbsp; r31&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "pop&nbsp;&nbsp;&nbsp; r30&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "pop&nbsp;&nbsp;&nbsp; r29&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "pop&nbsp;&nbsp;&nbsp; r28&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "pop&nbsp;&nbsp;&nbsp; r27&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "pop&nbsp;&nbsp;&nbsp; r26&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "pop&nbsp;&nbsp;&nbsp; r25&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "pop&nbsp;&nbsp;&nbsp; r24&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "pop&nbsp;&nbsp;&nbsp; r23&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "pop&nbsp;&nbsp;&nbsp; r22&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "pop&nbsp;&nbsp;&nbsp; r21&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "pop&nbsp;&nbsp;&nbsp; r20&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "pop&nbsp;&nbsp;&nbsp; r19&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "pop&nbsp;&nbsp;&nbsp; r18&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "pop&nbsp;&nbsp;&nbsp; r17&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "pop&nbsp;&nbsp;&nbsp; r16&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "pop&nbsp;&nbsp;&nbsp; r15&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "pop&nbsp;&nbsp;&nbsp; r14&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "pop&nbsp;&nbsp;&nbsp; r13&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "pop&nbsp;&nbsp;&nbsp; r12&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "pop&nbsp;&nbsp;&nbsp; r11&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "pop&nbsp;&nbsp;&nbsp; r10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "pop&nbsp;&nbsp;&nbsp; r9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "pop&nbsp;&nbsp;&nbsp; r8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "pop&nbsp;&nbsp;&nbsp; r7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "pop&nbsp;&nbsp;&nbsp; r6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "pop&nbsp;&nbsp;&nbsp; r5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "pop&nbsp;&nbsp;&nbsp; r4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "pop&nbsp;&nbsp;&nbsp; r3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "pop&nbsp;&nbsp;&nbsp; r2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "pop&nbsp;&nbsp;&nbsp; r1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "pop&nbsp;&nbsp;&nbsp; r0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "out&nbsp;&nbsp;&nbsp; \_\_SREG\_\_, r0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "pop&nbsp;&nbsp;&nbsp; r0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n\t"&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; );

/\*-----------------------------------------------------------\*/

/\*  
\* Perform hardware setup to enable ticks from timer 1, compare match A.  
\*/  
static void prvSetupTimerInterrupt( void );  
/\*-----------------------------------------------------------\*/

/\*  
\* See header file for description.  
\*/  
portSTACK\_TYPE \*pxPortInitialiseStack( portSTACK\_TYPE \*pxTopOfStack, pdTASK\_CODE pxCode, void \*pvParameters )  
{  
unsigned portSHORT usAddress;

&nbsp;&nbsp;&nbsp; /\* Place a few bytes of known values on the bottom of the stack.  
&nbsp;&nbsp;&nbsp; This is just useful for debugging. \*/

&nbsp;&nbsp;&nbsp; \*pxTopOfStack = 0x11;  
&nbsp;&nbsp;&nbsp; pxTopOfStack–;  
&nbsp;&nbsp;&nbsp; \*pxTopOfStack = 0x22;  
&nbsp;&nbsp;&nbsp; pxTopOfStack–;  
&nbsp;&nbsp;&nbsp; \*pxTopOfStack = 0x33;  
&nbsp;&nbsp;&nbsp; pxTopOfStack–;

&nbsp;&nbsp;&nbsp; /\* Simulate how the stack would look after a call to vPortYield() generated by  
&nbsp;&nbsp;&nbsp; the compiler. \*/

&nbsp;&nbsp;&nbsp; /\*lint -e950 -e611 -e923 Lint doesn’t like this much - but nothing I can do about it. \*/

&nbsp;&nbsp;&nbsp; /\* The start of the task code will be popped off the stack last, so place  
&nbsp;&nbsp;&nbsp; it on first. \*/  
&nbsp;&nbsp;&nbsp; usAddress = ( unsigned portSHORT ) pxCode;  
&nbsp;&nbsp;&nbsp; \*pxTopOfStack = ( portSTACK\_TYPE ) ( usAddress & ( unsigned portSHORT ) 0x00ff );  
&nbsp;&nbsp;&nbsp; pxTopOfStack–;

&nbsp;&nbsp;&nbsp; usAddress \>\>= 8;  
&nbsp;&nbsp;&nbsp; \*pxTopOfStack = ( portSTACK\_TYPE ) ( usAddress & ( unsigned portSHORT ) 0x00ff );  
&nbsp;&nbsp;&nbsp; pxTopOfStack–;

&nbsp;&nbsp;&nbsp; /\* Next simulate the stack as if after a call to portSAVE\_CONTEXT().&nbsp;  
&nbsp;&nbsp;&nbsp; portSAVE\_CONTEXT places the flags on the stack immediately after r0  
&nbsp;&nbsp;&nbsp; to ensure the interrupts get disabled as soon as possible, and so ensuring  
&nbsp;&nbsp;&nbsp; the stack use is minimal should a context switch interrupt occur. \*/  
&nbsp;&nbsp;&nbsp; \*pxTopOfStack = ( portSTACK\_TYPE ) 0x00;&nbsp;&nbsp;&nbsp; /\* R0 \*/  
&nbsp;&nbsp;&nbsp; pxTopOfStack–;  
&nbsp;&nbsp;&nbsp; \*pxTopOfStack = portFLAGS\_INT\_ENABLED;  
&nbsp;&nbsp;&nbsp; pxTopOfStack–;

&nbsp;&nbsp;&nbsp; /\* Now the remaining registers.&nbsp;&nbsp; The compiler expects R1 to be 0. \*/  
&nbsp;&nbsp;&nbsp; \*pxTopOfStack = ( portSTACK\_TYPE ) 0x00;&nbsp;&nbsp;&nbsp; /\* R1 \*/  
&nbsp;&nbsp;&nbsp; pxTopOfStack–;  
&nbsp;&nbsp;&nbsp; \*pxTopOfStack = ( portSTACK\_TYPE ) 0x02;&nbsp;&nbsp;&nbsp; /\* R2 \*/  
&nbsp;&nbsp;&nbsp; pxTopOfStack–;  
&nbsp;&nbsp;&nbsp; \*pxTopOfStack = ( portSTACK\_TYPE ) 0x03;&nbsp;&nbsp;&nbsp; /\* R3 \*/  
&nbsp;&nbsp;&nbsp; pxTopOfStack–;  
&nbsp;&nbsp;&nbsp; \*pxTopOfStack = ( portSTACK\_TYPE ) 0x04;&nbsp;&nbsp;&nbsp; /\* R4 \*/  
&nbsp;&nbsp;&nbsp; pxTopOfStack–;  
&nbsp;&nbsp;&nbsp; \*pxTopOfStack = ( portSTACK\_TYPE ) 0x05;&nbsp;&nbsp;&nbsp; /\* R5 \*/  
&nbsp;&nbsp;&nbsp; pxTopOfStack–;  
&nbsp;&nbsp;&nbsp; \*pxTopOfStack = ( portSTACK\_TYPE ) 0x06;&nbsp;&nbsp;&nbsp; /\* R6 \*/  
&nbsp;&nbsp;&nbsp; pxTopOfStack–;  
&nbsp;&nbsp;&nbsp; \*pxTopOfStack = ( portSTACK\_TYPE ) 0x07;&nbsp;&nbsp;&nbsp; /\* R7 \*/  
&nbsp;&nbsp;&nbsp; pxTopOfStack–;  
&nbsp;&nbsp;&nbsp; \*pxTopOfStack = ( portSTACK\_TYPE ) 0x08;&nbsp;&nbsp;&nbsp; /\* R8 \*/  
&nbsp;&nbsp;&nbsp; pxTopOfStack–;  
&nbsp;&nbsp;&nbsp; \*pxTopOfStack = ( portSTACK\_TYPE ) 0x09;&nbsp;&nbsp;&nbsp; /\* R9 \*/  
&nbsp;&nbsp;&nbsp; pxTopOfStack–;  
&nbsp;&nbsp;&nbsp; \*pxTopOfStack = ( portSTACK\_TYPE ) 0x10;&nbsp;&nbsp;&nbsp; /\* R10 \*/  
&nbsp;&nbsp;&nbsp; pxTopOfStack–;  
&nbsp;&nbsp;&nbsp; \*pxTopOfStack = ( portSTACK\_TYPE ) 0x11;&nbsp;&nbsp;&nbsp; /\* R11 \*/  
&nbsp;&nbsp;&nbsp; pxTopOfStack–;  
&nbsp;&nbsp;&nbsp; \*pxTopOfStack = ( portSTACK\_TYPE ) 0x12;&nbsp;&nbsp;&nbsp; /\* R12 \*/  
&nbsp;&nbsp;&nbsp; pxTopOfStack–;  
&nbsp;&nbsp;&nbsp; \*pxTopOfStack = ( portSTACK\_TYPE ) 0x13;&nbsp;&nbsp;&nbsp; /\* R13 \*/  
&nbsp;&nbsp;&nbsp; pxTopOfStack–;  
&nbsp;&nbsp;&nbsp; \*pxTopOfStack = ( portSTACK\_TYPE ) 0x14;&nbsp;&nbsp;&nbsp; /\* R14 \*/  
&nbsp;&nbsp;&nbsp; pxTopOfStack–;  
&nbsp;&nbsp;&nbsp; \*pxTopOfStack = ( portSTACK\_TYPE ) 0x15;&nbsp;&nbsp;&nbsp; /\* R15 \*/  
&nbsp;&nbsp;&nbsp; pxTopOfStack–;  
&nbsp;&nbsp;&nbsp; \*pxTopOfStack = ( portSTACK\_TYPE ) 0x16;&nbsp;&nbsp;&nbsp; /\* R16 \*/  
&nbsp;&nbsp;&nbsp; pxTopOfStack–;  
&nbsp;&nbsp;&nbsp; \*pxTopOfStack = ( portSTACK\_TYPE ) 0x17;&nbsp;&nbsp;&nbsp; /\* R17 \*/  
&nbsp;&nbsp;&nbsp; pxTopOfStack–;  
&nbsp;&nbsp;&nbsp; \*pxTopOfStack = ( portSTACK\_TYPE ) 0x18;&nbsp;&nbsp;&nbsp; /\* R18 \*/  
&nbsp;&nbsp;&nbsp; pxTopOfStack–;  
&nbsp;&nbsp;&nbsp; \*pxTopOfStack = ( portSTACK\_TYPE ) 0x19;&nbsp;&nbsp;&nbsp; /\* R19 \*/  
&nbsp;&nbsp;&nbsp; pxTopOfStack–;  
&nbsp;&nbsp;&nbsp; \*pxTopOfStack = ( portSTACK\_TYPE ) 0x20;&nbsp;&nbsp;&nbsp; /\* R20 \*/  
&nbsp;&nbsp;&nbsp; pxTopOfStack–;  
&nbsp;&nbsp;&nbsp; \*pxTopOfStack = ( portSTACK\_TYPE ) 0x21;&nbsp;&nbsp;&nbsp; /\* R21 \*/  
&nbsp;&nbsp;&nbsp; pxTopOfStack–;  
&nbsp;&nbsp;&nbsp; \*pxTopOfStack = ( portSTACK\_TYPE ) 0x22;&nbsp;&nbsp;&nbsp; /\* R22 \*/  
&nbsp;&nbsp;&nbsp; pxTopOfStack–;  
&nbsp;&nbsp;&nbsp; \*pxTopOfStack = ( portSTACK\_TYPE ) 0x23;&nbsp;&nbsp;&nbsp; /\* R23 \*/  
&nbsp;&nbsp;&nbsp; pxTopOfStack–;

&nbsp;&nbsp;&nbsp; /\* Place the parameter on the stack in the expected location. \*/  
&nbsp;&nbsp;&nbsp; usAddress = ( unsigned portSHORT ) pvParameters;  
&nbsp;&nbsp;&nbsp; \*pxTopOfStack = ( portSTACK\_TYPE ) ( usAddress & ( unsigned portSHORT ) 0x00ff );  
&nbsp;&nbsp;&nbsp; pxTopOfStack–;

&nbsp;&nbsp;&nbsp; usAddress \>\>= 8;  
&nbsp;&nbsp;&nbsp; \*pxTopOfStack = ( portSTACK\_TYPE ) ( usAddress & ( unsigned portSHORT ) 0x00ff );  
&nbsp;&nbsp;&nbsp; pxTopOfStack–;

&nbsp;&nbsp;&nbsp; \*pxTopOfStack = ( portSTACK\_TYPE ) 0x26;&nbsp;&nbsp;&nbsp; /\* R26 X \*/  
&nbsp;&nbsp;&nbsp; pxTopOfStack–;  
&nbsp;&nbsp;&nbsp; \*pxTopOfStack = ( portSTACK\_TYPE ) 0x27;&nbsp;&nbsp;&nbsp; /\* R27 \*/  
&nbsp;&nbsp;&nbsp; pxTopOfStack–;  
&nbsp;&nbsp;&nbsp; \*pxTopOfStack = ( portSTACK\_TYPE ) 0x28;&nbsp;&nbsp;&nbsp; /\* R28 Y \*/  
&nbsp;&nbsp;&nbsp; pxTopOfStack–;  
&nbsp;&nbsp;&nbsp; \*pxTopOfStack = ( portSTACK\_TYPE ) 0x29;&nbsp;&nbsp;&nbsp; /\* R29 \*/  
&nbsp;&nbsp;&nbsp; pxTopOfStack–;  
&nbsp;&nbsp;&nbsp; \*pxTopOfStack = ( portSTACK\_TYPE ) 0x30;&nbsp;&nbsp;&nbsp; /\* R30 Z \*/  
&nbsp;&nbsp;&nbsp; pxTopOfStack–;  
&nbsp;&nbsp;&nbsp; \*pxTopOfStack = ( portSTACK\_TYPE ) 0x031;&nbsp;&nbsp;&nbsp; /\* R31 \*/  
&nbsp;&nbsp;&nbsp; pxTopOfStack–;

&nbsp;&nbsp;&nbsp; /\*lint +e950 +e611 +e923 \*/

&nbsp;&nbsp;&nbsp; return pxTopOfStack;  
}  
/\*-----------------------------------------------------------\*/

portBASE\_TYPE xPortStartScheduler( void )  
{  
&nbsp;&nbsp;&nbsp; /\* In this port we ignore the parameter and use the configUSE\_PREEMPTION  
&nbsp;&nbsp;&nbsp; definition instead. \*/

&nbsp;&nbsp;&nbsp; /\* Setup the hardware to generate the tick. \*/  
&nbsp;&nbsp;&nbsp; prvSetupTimerInterrupt();

&nbsp;&nbsp;&nbsp; /\* Restore the context of the first task that is going to run. \*/  
&nbsp;&nbsp;&nbsp; portRESTORE\_CONTEXT();

&nbsp;&nbsp;&nbsp; /\* Simulate a function call end as generated by the compiler.&nbsp; We will now  
&nbsp;&nbsp;&nbsp; jump to the start of the task the context of which we have just restored. \*/  
&nbsp;&nbsp;&nbsp; asm volatile ( "ret" );

&nbsp;&nbsp;&nbsp; /\* Should not get here. \*/  
&nbsp;&nbsp;&nbsp; return pdTRUE;  
}  
/\*-----------------------------------------------------------\*/

void vPortEndScheduler( void )  
{  
&nbsp;&nbsp;&nbsp; /\* It is unlikely that the AVR port will get stopped.&nbsp; If required simply  
&nbsp;&nbsp;&nbsp; disable the tick interrupt here. \*/  
}  
/\*-----------------------------------------------------------\*/

/\*  
\* Manual context switch.&nbsp; The first thing we do is save the registers so we  
\* can use a naked attribute.  
\*/  
void vPortYield( void ) \_\_attribute\_\_ ( ( naked ) );  
void vPortYield( void )  
{  
&nbsp;&nbsp;&nbsp; portSAVE\_CONTEXT();  
&nbsp;&nbsp;&nbsp; vTaskSwitchContext();  
&nbsp;&nbsp;&nbsp; portRESTORE\_CONTEXT();

&nbsp;&nbsp;&nbsp; asm volatile ( "ret" );  
}  
/\*-----------------------------------------------------------\*/

/\*  
\* Context switch function used by the tick.&nbsp; This must be identical to  
\* vPortYield() from the call to vTaskSwitchContext() onwards.&nbsp; The only  
\* difference from vPortYield() is the tick count is incremented as the  
\* call comes from the tick ISR.  
\*/  
void vPortYieldFromTick( void ) \_\_attribute\_\_ ( ( naked ) );  
void vPortYieldFromTick( void )  
{  
&nbsp;&nbsp;&nbsp; portSAVE\_CONTEXT();  
&nbsp;&nbsp;&nbsp; vTaskIncrementTick();  
&nbsp;&nbsp;&nbsp; vTaskSwitchContext();  
&nbsp;&nbsp;&nbsp; portRESTORE\_CONTEXT();

&nbsp;&nbsp;&nbsp; asm volatile ( "ret" );  
}  
/\*-----------------------------------------------------------\*/

/\*  
\* Setup timer 1 compare match A to generate a tick interrupt.  
\*/  
static void prvSetupTimerInterrupt( void )  
{  
unsigned portLONG ulCompareMatch;  
unsigned portCHAR ucLowByte;

&nbsp;&nbsp;&nbsp; /\*This is a personal modification. The timer normally used is Timer 1, having 16 bits.  
&nbsp;&nbsp;&nbsp;&nbsp; Timer1 is used for counting of external events on my app.  
&nbsp;&nbsp;&nbsp;&nbsp; One of the consequences of changing the timer to one of 8 bits, is that the configTICK\_RATE\_HZ  
&nbsp;&nbsp;&nbsp;&nbsp; cannot be too small compared to the configCPU\_CLOCK\_HZ. The relation between them follows the  
&nbsp;&nbsp;&nbsp;&nbsp; ecuation:  
&nbsp;&nbsp;&nbsp;&nbsp;  
&nbsp;&nbsp;&nbsp;&nbsp; configTICK\_RATE\_HZ \>= configCPU\_CLOCK\_HZ / 16384  
&nbsp;&nbsp;&nbsp;&nbsp;  
&nbsp;&nbsp;&nbsp; \*/  
&nbsp;&nbsp;&nbsp;  
&nbsp;&nbsp;&nbsp; /\* Using 8bit timer 2 to generate the tick.&nbsp; Correct fuses must be  
&nbsp;&nbsp;&nbsp; selected for the configCPU\_CLOCK\_HZ clock. \*/

&nbsp;&nbsp;&nbsp; ulCompareMatch = configCPU\_CLOCK\_HZ / configTICK\_RATE\_HZ;

&nbsp;&nbsp;&nbsp; /\* We only have 8 bits so have to scale to get our required tick rate. \*/  
&nbsp;&nbsp;&nbsp; ulCompareMatch /= portCLOCK\_PRESCALER; //&nbsp;&nbsp;&nbsp; value/64

&nbsp;&nbsp;&nbsp; /\* Adjust for correct value. \*/  
&nbsp;&nbsp;&nbsp; ulCompareMatch -= ( unsigned portLONG ) 1;

&nbsp;&nbsp;&nbsp; /\* Setup compare match value for compare match A.&nbsp; Interrupts are disabled  
&nbsp;&nbsp;&nbsp; before this is called so we need not worry here. \*/  
&nbsp;&nbsp;&nbsp; ucLowByte = ( unsigned portCHAR ) ( ulCompareMatch & ( unsigned portLONG ) 0xff );  
&nbsp;&nbsp;&nbsp; OCR2 = ucLowByte;

&nbsp;&nbsp;&nbsp; /\* Setup clock source and compare match behaviour. \*/  
&nbsp;&nbsp;&nbsp; ucLowByte = portCLEAR\_COUNTER\_ON\_MATCH | portPRESCALE\_64;  
&nbsp;&nbsp;&nbsp; TCCR2 = ucLowByte;//CTC, CLK/64  
&nbsp;&nbsp;&nbsp;  
&nbsp;&nbsp;&nbsp; /\* Enable the interrupt - this is okay as interrupt are currently globally  
&nbsp;&nbsp;&nbsp; disabled. \*/  
&nbsp;&nbsp;&nbsp; ucLowByte = TIMSK;  
&nbsp;&nbsp;&nbsp; ucLowByte |= portCOMPARE\_MATCH\_A\_INTERRUPT\_ENABLE;  
&nbsp;&nbsp;&nbsp; TIMSK = ucLowByte;  
}  
/\*-----------------------------------------------------------\*/

#if configUSE\_PREEMPTION == 1

&nbsp;&nbsp;&nbsp; /\*  
&nbsp;&nbsp;&nbsp;&nbsp; \* Tick ISR for preemptive scheduler.&nbsp; We can use a naked attribute as  
&nbsp;&nbsp;&nbsp;&nbsp; \* the context is saved at the start of vPortYieldFromTick().&nbsp; The tick  
&nbsp;&nbsp;&nbsp;&nbsp; \* count is incremented after the context is saved.  
&nbsp;&nbsp;&nbsp;&nbsp; \*/  
&nbsp;&nbsp;&nbsp; void SIG\_OUTPUT\_COMPARE2(void) \_\_attribute\_\_ ((signal, naked));  
&nbsp;&nbsp;&nbsp; void SIG\_OUTPUT\_COMPARE2(void)  
&nbsp;&nbsp;&nbsp; {  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vPortYieldFromTick();  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; asm volatile ( "reti" );  
&nbsp;&nbsp;&nbsp; }  
#else

&nbsp;&nbsp;&nbsp; /\*  
&nbsp;&nbsp;&nbsp;&nbsp; \* Tick ISR for the cooperative scheduler.&nbsp; All this does is increment the  
&nbsp;&nbsp;&nbsp;&nbsp; \* tick count.&nbsp; We don’t need to switch context, this can only be done by  
&nbsp;&nbsp;&nbsp;&nbsp; \* manual calls to taskYIELD();  
&nbsp;&nbsp;&nbsp;&nbsp; \*/  
&nbsp;&nbsp;&nbsp; void SIG\_OUTPUT\_COMPARE2(void) \_\_attribute\_\_ ((signal));  
&nbsp;&nbsp;&nbsp; void SIG\_OUTPUT\_COMPARE2(void)  
&nbsp;&nbsp;&nbsp; {  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vTaskIncrementTick();  
&nbsp;&nbsp;&nbsp; }  
#endif

&nbsp;&nbsp;&nbsp;
