5.代码实现 经过了以上修改之后,就可以轻松实现基于FreeRTOS的呼吸灯了。代码如下:
[cpp] view plaincopy
- /* Standard includes. */
- #include <stdio.h>
- /* Scheduler includes. */
- #include "FreeRTOS.h"
- #include "task.h"
- #include "queue.h"
- /* Library includes. */
- #include "stm32f10x.h"
- #define LED0_ON() GPIO_SetBits(GPIOB,GPIO_Pin_0);
- #define LED0_OFF() GPIO_ResetBits(GPIOB,GPIO_Pin_0);
- static
void prvSetupHardware( void ); - static
void vLEDTask( void *pvParameters ); - void vLedInit(void);
- int main( void )
- {
- /* 初始化硬件平台 */
- prvSetupHardware();
- /* 建立任务 */
- xTaskCreate( vLEDTask, ( signed portCHAR * ) "LED", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY+3, NULL );
- /* 启动OS */
- vTaskStartScheduler();
- return 0;
- }
- /*-----------------------------------------------------------*/
- void vLEDTask( void *pvParameters )
- {
- for( ;; )
- {
- LED0_ON();
- vTaskDelay( 100/portTICK_RATE_MS );
- LED0_OFF();
- vTaskDelay( 100/portTICK_RATE_MS );
- }
- }
- /*-----------------------------------------------------------*/
- static
void prvSetupHardware( void ) - {
- vLedInit();
- }
- /*-----------------------------------------------------------*/
- void vLedInit( void )
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE );
- /*LED0 @ GPIOB.0*/
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_Init( GPIOB, &GPIO_InitStructure );
- }
6.总结 本人觉得FreeRTOS使用比uCOS简单,虽然FreeRTOS资料远没有uCOS多,但是毕竟uCOS是一个收费产品,而FreeRTOS是一个开源的产品。后面还将会整理一些FreeRTOS的范例代码,希望和大家一起推动FreeRTOS的使用。
【代码链接】
【版本信息】IAR 6.5
7.参考资料【在STM32使用3.5函式庫移植FreeRTOS】
【MDK下基于STM32固件库V3.5.0的FreeRTOS移植笔记】 |