FreeRTOSに基づくマルチタスクプログラム

準備ができました

  1. freeROTS公式ウェブサイトでfreeROTSソースコードをダウンロードします
  2. 新しいフォルダーを作成し、解凍したフォルダーのFreeROTS \ Source \ディレクトリにあるすべてのファイルを新しく作成したフォルダーにコピーします
  3. freeROS \ FreeRTOSv9.0.0 \ FreeRTOS \ Source \ portal \ RVDS \ ARM_CM3のARM_CM3をkeilフォルダーにコピーします
  4. 解凍したソースコードフォルダーのFreeRTOS \ Demo \ CORTEX_stm32f103_keilにあるFreeRTOSConfig.hを新しいフォルダーにコピーします

freeRTOSポーティング

  1. マーチャントが提供するルーチンを開き、ルーチンディレクトリで、作成したフォルダをコピーします

  2. プロジェクトを開き、プロジェクトに新しいグループFreeRTOSを作成します

  3. グループFreeRTOSへのファイルの追加追加する
    必要のあるすべてのファイルは、プロジェクトディレクトリにコピーされたばかりのフォルダーにあります。パスは次のとおりです
    。freeRTOS\ tasks.c
    freeRTOS \ list.c
    freeRTOS \ portal \ Keil \ ARM_CM3 \ port .c
    freeRTOS \ portal \ MemMang \ heap_4.c

  4. ヘッダーファイルのパスを追加し、魔法の杖をクリックしてc / c ++列を選択し、IncludePathを選択して、必要なファイルを追加します

  5. リアルタイムオペレーティングシステムでプログラミングするには、FreeRTOSConfig.hとstm32f10x_it.cの2つのファイルも変更する必要があります。

メインタスクを書く

main.cに次のコードを入力します

/* FreeRTOS头文件*/
#include "FreeRTOS.h"
#include "task.h"
/*stm32头文件*/
#include "bsp_led.h"
#include "bsp_usart.h"
#include "stm32f10x.h"


void Task1_led1()     //任务一
{
    
    
	while(1)
	{
    
    
		LED1_ON;
		vTaskDelay(500);	 //延时500ms
		LED1_OFF;
		vTaskDelay(500);	//延时500ms
	}
}
 
void Task2_uart()     //任务二

	while(1)
	{
    
    
		Usart_SendString( DEBUG_USARTx,"贾哥你好帅\n");
		vTaskDelay(2000);	//延时2000ms
	}
}

void Task3_led2()    //任务二
{
    
    
	while(1)
	{
    
    
	LED2_ON;
	vTaskDelay(1000);	 //延时1000ms
	LED2_OFF;
	vTaskDelay(1000);	//延时1000ms
	}
}

 int main(void)
 {
    
    	
	 
	 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);   //中断优先级设置为组4
	  
	 LED_GPIO_Config();		  	//LED初始化
	 USART_Config();            //串口初始化
	 xTaskCreate(Task1_led1,   //任务一函数指针
	           "TASK1_led1",   //任务一名称
	                    40,   //堆栈深度(字节)
	                  NULL,   //任务参数为空
	                     1,   //任务优先级设置,数字越大优先级越高
	                 NULL);   //任务句柄为空
	 
	 xTaskCreate(Task2_uart,"TASK2_uart",40,NULL,2,NULL);  //同上
	 xTaskCreate(Task3_led2,"TASK3_led2",40,NULL,3,NULL);  //同上
	 
	 vTaskStartScheduler();  //启动任务调度器,系统运行
	 
  while(1)
	{
    
    	
	}
 }

最後の実行
は次の場所から取得されますhttps//blog.csdn.net/zmhDD/article/details/110447481

おすすめ

転載: blog.csdn.net/xianyudewo/article/details/110494848