準備ができました
- freeROTS公式ウェブサイトでfreeROTSソースコードをダウンロードします
- 新しいフォルダーを作成し、解凍したフォルダーのFreeROTS \ Source \ディレクトリにあるすべてのファイルを新しく作成したフォルダーにコピーします
- freeROS \ FreeRTOSv9.0.0 \ FreeRTOS \ Source \ portal \ RVDS \ ARM_CM3のARM_CM3をkeilフォルダーにコピーします
- 解凍したソースコードフォルダーのFreeRTOS \ Demo \ CORTEX_stm32f103_keilにあるFreeRTOSConfig.hを新しいフォルダーにコピーします
freeRTOSポーティング
-
マーチャントが提供するルーチンを開き、ルーチンディレクトリで、作成したフォルダをコピーします
-
プロジェクトを開き、プロジェクトに新しいグループFreeRTOSを作成します
-
グループFreeRTOSへのファイルの追加追加する
必要のあるすべてのファイルは、プロジェクトディレクトリにコピーされたばかりのフォルダーにあります。パスは次のとおりです
。freeRTOS\ tasks.c
freeRTOS \ list.c
freeRTOS \ portal \ Keil \ ARM_CM3 \ port .c
freeRTOS \ portal \ MemMang \ heap_4.c -
ヘッダーファイルのパスを追加し、魔法の杖をクリックしてc / c ++列を選択し、IncludePathを選択して、必要なファイルを追加します
-
リアルタイムオペレーティングシステムでプログラミングするには、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