1、首先准备好空白工程:
位于文件夹正点原子-探索者F4 资料盘(A盘)\4,程序源码\2,标准例程-库函数版本\实验0 Template工程模板 (下载地址:stm32f407探索者开发板-正点原子资料),然后准备好TencentOS tiny的源码,位于TencentOS tiny。
2、打开工程,将源码的arch、kernel、cmsis和tos_config的.c文件和.h文件移植到工程中,具体步骤参考TencentOS-tiny 移植到STM32F407(MDK)中的步骤,如下:
里面的(6. 修改usart.c代码:6.1 printf函数重定向)我并没有修改,因为探索者的空白工程(基于标准库)已经有了usart.c和.h,已经将printf重定向到串口1了。
3、以上过程完毕后,就可以修改main函数了,采用
#include "stm32f4xx.h"
#include "usart.h"
#include "tos_k.h"
k_task_t task1;
k_task_t task2;
k_stack_t task_stack1[1024];
k_stack_t task_stack2[1024];
void test_task1(void *Parameter)
{
while(1)
{
printf("task1 running\r\n");
tos_task_delay(200);
}
}
void test_task2(void *Parameter)
{
k_err_t err;
printf("task2 running\r\n");
tos_task_delay(2000);
printf("suspend task1\r\n");
err = tos_task_suspend(&task1);
if(err != K_ERR_NONE)
printf("suspend task1 fail! code : %d \r\n",err);
tos_task_delay(2000);
printf("resume task1\r\n");
err = tos_task_resume(&task1);
if(err != K_ERR_NONE)
printf("resume task1 fail! code : %d \r\n",err);
tos_task_delay(2000);
printf("destroy task1\r\n");
err = tos_task_destroy(&task1);
if(err != K_ERR_NONE)
printf("destroy task1 fail! code : %d \r\n",err);
while(1)
{
printf("task2 running\r\n");
tos_task_delay(1000);
}
}
int main(void)
{
k_err_t err;
uart_init(115200);
printf("Welcome to TencentOS tiny\r\n");
tos_knl_init();
tos_robin_default_timeslice_config((k_timeslice_t)500u);
printf("create task1\r\n");
err = tos_task_create(&task1,
"task1",
test_task1,
NULL,
3,
task_stack1,
1024,
20);
if(err != K_ERR_NONE)
printf("TencentOS Create task1 fail! code : %d \r\n",err);
printf("create task2\r\n");
err = tos_task_create(&task2,
"task2",
test_task2,
NULL,
4,
task_stack2,
1024,
20);
if(err != K_ERR_NONE)
printf("TencentOS Create task2 fail! code : %d \r\n",err);
tos_knl_start();
}
代码进行了修改,来源是https://github.com/jiejieTop/TencentOS-Demo/tree/master/01-task
4、使用STlink V2下载程序,使用XCOM查看结果
|