48 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			48 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
# Demos #
 | 
						|
 | 
						|
For simplicity and user's convenience, there are only 2 basic application demos which are *Device* and *Host* respectively. Each application demo, however, has a few projects, each for its supported RTOS. For instance, in addition to the *src* folder, you will also find in the /demo/device 
 | 
						|
 | 
						|
- device\_os\_none for no RTOS
 | 
						|
- device\_freertos for freeRTOS
 | 
						|
- device\_cmsis_rtx for ARM CMSIS with RTX implemenation
 | 
						|
 | 
						|
To be able to have the same application code running across RTOSes, the application make use of the "internal" **OSAL layer**. Thus this makes the application code a bit weird and over-complicated than it should be in some (many) cases. This is absolutely not necessary in product development. User can just use the native API function of supported RTOS or a state machine or blocking wait in case of none OS. For example, instead of the blinking task in application
 | 
						|
 | 
						|
~~~{.c}
 | 
						|
OSAL_TASK_FUNCTION( led_blinking_task , p_task_para)
 | 
						|
{
 | 
						|
  OSAL_TASK_LOOP_BEGIN
 | 
						|
 | 
						|
  static uint32_t led_on_mask = 0;
 | 
						|
 | 
						|
  osal_task_delay(led_blink_interval_ms);
 | 
						|
 | 
						|
  board_leds(led_on_mask, 1 - led_on_mask);
 | 
						|
  led_on_mask = 1 - led_on_mask; // toggle
 | 
						|
 | 
						|
  OSAL_TASK_LOOP_END
 | 
						|
}
 | 
						|
~~~
 | 
						|
 | 
						|
can be written in FreeRTOS's native API
 | 
						|
 | 
						|
~~~{.c}
 | 
						|
void led_blinking_task( void * p_task_para )
 | 
						|
{
 | 
						|
  while(1)
 | 
						|
  {
 | 
						|
    static uint32_t led_on_mask = 0;
 | 
						|
 | 
						|
    // FreeRTOS API's vTaskDelay is used in place of osal_task_delay. Note it takes input parameter in tick
 | 
						|
    vTaskDelay( (led_blink_interval_ms * CFG_TUSB_TICKS_HZ) / 1000);
 | 
						|
 | 
						|
    board_leds(led_on_mask, 1 - led_on_mask);
 | 
						|
    led_on_mask = 1 - led_on_mask; // toggle
 | 
						|
  }
 | 
						|
}
 | 
						|
~~~
 | 
						|
 | 
						|
 | 
						|
[//]: # (\subpage md_demos_readme)
 | 
						|
[//]: # (\subpage md_demos_device_readme)
 | 
						|
[//]: # (\subpage md_demos_host_readme) |