• Aucun résultat trouvé

MI52 - Final1h30. Document : One sheet of paper note only. You can answer in French or English.

N/A
N/A
Protected

Academic year: 2022

Partager "MI52 - Final1h30. Document : One sheet of paper note only. You can answer in French or English."

Copied!
2
0
0

Texte intégral

(1)

MI52 - P16

MI52 - Final

1h30. Document : One sheet of paper note only. You can answer in French or English.

1. Memory and OS general questions

1. A program use a pointer to a memory mapped register to access a peripheral register :

volatile unsigned int * memory_mapped_reg = (volatile unsigned int *) PHYSICAL_BASE_ADRESS + 0x8;

1.1. what can be the problem if the program run on an architecture with a memory cache and try to read the peripheral register ?

1.2. How is it resolved by cache memory controller systems.

2. Explain briefly what does a MMU (with no TLB) do when a microprocessor fetch a new data in memory i.e. what happen when a virtual memory address is generated on the microprocessor bus.

3. Explain briefly why a NAND flash without a NAND memory controller can not be used to store directly executable code ?

2. Signal processing with FreeRTOS

An application on a STM32 SoC do process an analog signal : every n us, the application must get a new data from an analog to digital converter (ADC), filter the new data (signal processing algorithm) and send the calculate output on a digital to analog converter (DAC).

To sample the input data (and also send the output data) a timer interrupt is used (TIM3). The hardware and software is initialized so that every n us the interrupt service routine (ISR) of the timer is called TIM3_ISR().

We do not want the calculus of the output data to be done in the ISR as it is a very long process. The calculus will be done in a high priority task synchronized with the ISR (vTask_data_processing). The ISR will only get a new datum from the ADC and send the previous calculated datum output to the DAC.

Some functions that you can use are already written :

uint32_t adc_get_data(void) : get a new data form the ADC

void dac_output_data(uint32_t data) : sent the data on the analog line

uint32_t ts_process_output_data(int data) : process the filtering of the data

The synchronisation between ISR and Task will be done through a binary semaphore. Here are the functions from the freeRTOS api that can be used :

SemaphoreHandle_t xSemaphoreCreateBinary( void );

xSemaphoreTake( SemaphoreHandle_t xSemaphore, TickType_t xTicksToWait );

xSemaphoreGive( SemaphoreHandle_t xSemaphore );

xSemaphoreGiveFromISR (SemaphoreHandle_t xSemaphore, signed BaseType_t *pxHigherPriorityTaskWoken)

Uncomplete code for the ISR and the data processing task :

SemaphoreHandle_t sem; /* The semaphore is created in the 'empty' state */

static void TIM3_ISR( void ) {

static signed BaseType_t xHigherPriorityTaskWoken;

xHigherPriorityTaskWoken = pdFALSE;

/* test the interrupt and acknowledge it */

if (TIM3->SR & TIM_SR_UIF){

TIM3->SR = 0;

[...]

}

portEND_SWITCHING_ISR( xHigherPriorityTaskWoken );

}

void vTask_data_processing( void *pvParameters ) {

sem = xSemaphoreCreateBinary();

(...)

1 NL

1

(2)

MI52 - P16

NVIC_SetPriority ( TIM3_IRQn, 4);

NVIC_EnableIRQ (TIM3_IRQn);

for( ;; ) { [...]

}

vTaskDelete( NULL );

}

Work :

1. Explain why the data processing is not done in the ISR but in a task

2. Explain what is the role of the instruction “portEND_SWITCHING_ISR( xHigherPriorityTaskWoken );” at the end of the isr

3. Complete the code of the ISR and task (1 and 2). Don't forget to comment your code and give explanations.

3. Device and Driver in the driver model of linux

here is the code of a driver initialisation for a platform driver on a ARM SoC that use the device tree. The devices that use this driver are connected to a platform bus that is a generic bus.

1. When are the probe and remove function of the driver called ? 2. What is the utility of “ match table ” ?

2 NL

2

static const struct of_device_id my_of_match[] = { { .compatible = "my,example", },

{ }, };

MODULE_DEVICE_TABLE(of, my_of_match);

static struct platform_driver platform_driver_example = { .driver = {

.name = "platform_driver_example", .owner = THIS_MODULE,

.of_match_table = my_of_match, },

.probe = platform_driver_example_probe, .remove = platform_driver_example_remove, };

/* init, exit functions */

module_platform_driver(platform_driver_example);

Références

Documents relatifs

The multi stage noise band cancellation architecture made of Σ∆ modulators is an excellent candidate to address the wide bandwidth high resolution and low power consumption trade-off

J. Barrau, et al.. Advances in the application of high Tc superconductors to microwave devices for analog signal processing.. During the last five years, the surface resistance R~

Assuming that a representative catalog of historical state trajectories is available, the key idea is to use the analog method to propose forecasts with no online evaluation of

To improve the interpolation of SSH satellite observations, a data-driven approach (i.e., constructing a dynamical forecast model from the data) was re- cently proposed: analog

plementation of the quire addition/subtraction is depicted in Figure 6 where the quire data structure is as depicted in Figure 7. An exact posit product fraction is shifted to

Report (National Research Council of Canada. Electrical Engineering and Radio Branch : ERA), 1948-01?. READ THESE TERMS AND CONDITIONS CAREFULLY BEFORE USING

Rendi- conti del Seminario Matematico della Università di Padova, University of Padua / European Mathe- matical Society, In press... In this note, we propose a shorter and

L’archive ouverte pluridisciplinaire HAL, est destinée au dépôt et à la diffusion de documents scientifiques de niveau recherche, publiés ou non, émanant des