Program for nuclear reactor - embedded systems, Programming Languages

Implement the "Nuclear Reactor" example using the following:

 An ISR triggered by a button press
 A task to update the temperatures
 A semaphore to communicate between the ISR and the update task
 The update task should use dynamic memory allocation to get a buffer in which to place the temperature.
 Pass the buffer containing the temperatures to the checking task using an RTOS queue.

Write an "Introduction to using FreeRTOS" document in which you use your "Nuclear Reactor" code as an example to explain the key concepts of Semaphores, queues, dynamic memory allocation in an RTOS and timing in an RTOS.

This is a code: Nuclear reactor.
////////////////////////////////////////////////////////

////////////////////////////////////////////////////////

//// main.c

////////////////////////////////////////////////////////

////////////////////////////////////////////////////////

#include

/* Scheduler include files. */

#include

#include

#include

#include

/*-----------------------------------------------------------*/

voidTaskUpdatTemps(void *pvParameters);

voidTaskCheckTemps(void *pvParameters);

/*-----------------------------------------------------------*/

//global shared data

int temperatures[2];

//xSemaphoreHandle-Data structure managed by the RTOS

xSemaphoreHandletemperaturesSem;

xSemaphoreHandleReleaseSem;

ISR(INT0_vect)

{

 //Release the semaphore

 xSemaphoreGive(ReleaseSem);

}

intmain(void)

{

 //Set direction of PORTB pin 5,6,7 as output pins

 DDRB |= (1<
 DDRB |= (1<
 DDRB |= (1<
 //Generate in on rising edge on INT0 pin - bits in EICRA Reg

 EICRA |= (1 << ISC00);

 EICRA |= (1 << ISC01);

 //Enable - bits in EIMSK reg

 EIMSK |= (1 << INT0);

 //Enable interrupts - Set I bit in SR(status register)

 sei();

 xTaskCreate(

 TaskUpdatTemps

 , NULL

 , 256

 , NULL

 , 2

 , NULL );

 xTaskCreate(

 TaskCheckTemps

 , NULL

 , 256

 , NULL

 , 1

 , NULL );

 //Create semaphores

 vSemaphoreCreateBinary(temperaturesSem);

 vSemaphoreCreateBinary(ReleaseSem);

 //Start the task Scheduler

 vTaskStartScheduler();

/*while(1)

 {

 //do nothing

 }*/

}

/*-----------------------------------------------------------*/

voidTaskUpdatTemps(void *pvParameters)

{

//Just keep compiler happy

 (void)pvParameters;

 staticint count = 0;

while(1)

 {

 //Take the semaphore ReleaseSem

 xSemaphoreTake(ReleaseSem, portMAX_DELAY);

 //Take the semaphore temperatureSem to protect atomic variables

 xSemaphoreTake(temperaturesSem, portMAX_DELAY);

 temperatures[0]=count;

 temperatures[1]=count;

 //Give the semaphore back

 xSemaphoreGive(temperaturesSem);

 //Increment Count variable

 count ++;

 //Toggle portb pin 6 to turn LED on/off (Using Exclusive OR)

 PORTB ^= (1<
 //Delay for 1 sec

 //vTaskDelay( 1000 / portTICK_RATE_MS );

 }

}

/*-----------------------------------------------------------*/

voidTaskCheckTemps(void *pvParameters) // Main Green LED Flash

{

int temp0, temp1;

 (void) pvParameters;

//Set direction of pin to be an output

 DDRB |= (1<
while(1)

 {

 //Take the semaphore temperatureSem to protect atomic variables

 xSemaphoreTake(temperaturesSem, portMAX_DELAY);

 temp0=temperatures[0];

 //Delay for 1 sec

 vTaskDelay( 1000 / portTICK_RATE_MS );

 temp1=temperatures[1];

 //Give the semaphore back

 xSemaphoreGive(temperaturesSem);

 //Toggle portb pin 5 to turn LED on/off (Using Exclusive OR)

 PORTB ^= (1<
 //Checking to see if temperatures match

 if(temp0 != temp1)

 {

 PORTB |= (1<
 }

 }

}

Posted Date: 4/2/2013 4:13:21 AM | Location : United States







Related Discussions:- Program for nuclear reactor - embedded systems, Assignment Help, Ask Question on Program for nuclear reactor - embedded systems, Get Answer, Expert's Help, Program for nuclear reactor - embedded systems Discussions

Write discussion on Program for nuclear reactor - embedded systems
Your posts are moderated
Related Questions
I am still waiting on a quote from you

Write and test a simple perl program on the linux platform.  You may use any linux system you wish, including the Suse linux installed in the lab. Activities. Note:  to r

I do have an assignment in operating systems programming ... how can i attach my file?

You are working for a cryptography department, where one of your jobs is to decipher intercepted messages that have been encrypted using a book cipher. The messages are sent by dif


#question. /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Description: *


1. Write the dual of the above max-?ow problem. 2. Solve both problems with AMPL, and for each print the values of the vari- ables and the values of the dual variables (if a p

Write a Prolog predicate has_duplicates(L) that is true if list L contains duplicated elements (that is at least 2 copies of an element). For instance: ?- has_duplicates([a,e,b,

Question 1: a) Assume that B is an array of 50 words; write a code which will place the smallest integer of array B in register AX. b) Write a small code (only three instr