三、创建TencentOS tiny任务,测试移植结果

1. 修改部分代码

修改stm32l0xx_it.c的中断函数,在stm32l0xx_it.c文件中包含 tos.h 头文件

三、创建TencentOS tiny任务,测试移植结果 - 图1

在stm32l0xx_it.c文件中的PendSV_Handler函数前添加___weak关键字,因为该函数在TencentOS tiny的调度汇编中已经重新实现;同时在SysTick_Handler函数中添加TencentOS tiny的调度处理函数,如下图所示:

三、创建TencentOS tiny任务,测试移植结果 - 图2

2. 编写TencentOS tiny 测试任务

在mian.c 中添加TencentOS tiny 头文件,编写任务函数

  1. #include "cmsis_os.h"
  2. //task1
  3. #define TASK1_STK_SIZE 256
  4. void task1(void *pdata);
  5. osThreadDef(task1, osPriorityNormal, 1, TASK1_STK_SIZE);
  6. //task2
  7. #define TASK2_STK_SIZE 256
  8. void task2(void *pdata);
  9. osThreadDef(task2, osPriorityNormal, 1, TASK2_STK_SIZE);
  10. void task1(void *pdata)
  11. {
  12. int count = 1;
  13. while(1)
  14. {
  15. printf("\r\nHello world!\r\n###This is task1 ,count is %d \r\n", count++);
  16. HAL_GPIO_TogglePin(LED_GPIO_Port,LED_Pin);
  17. osDelay(2000);
  18. }
  19. }
  20. void task2(void *pdata)
  21. {
  22. int count = 1;
  23. while(1)
  24. {
  25. printf("\r\nHello TencentOS !\r\n***This is task2 ,count is %d \r\n", count++);
  26. osDelay(1000);
  27. }
  28. }
  29. int fputc(int ch, FILE *f)
  30. {
  31. if (ch == '\n')
  32. {
  33. HAL_UART_Transmit(&huart2, (void *)"\r", 1,30000);
  34. }
  35. HAL_UART_Transmit(&huart2, (uint8_t *)&ch, 1, 0xFFFF);
  36. return ch;
  37. }

如图:

三、创建TencentOS tiny任务,测试移植结果 - 图3

继续在main.c 的mian函数中硬件外设初始化代码后添加TencentOS tiny的初始化代码:

  1. osKernelInitialize(); //TOS Tiny kernel initialize
  2. osThreadCreate(osThread(task1), NULL);// Create task1
  3. osThreadCreate(osThread(task2), NULL);// Create task2
  4. osKernelStart();//Start TOS Tiny

如图:

三、创建TencentOS tiny任务,测试移植结果 - 图4

3. 编译下载测试TencentOS tiny移植结果

三、创建TencentOS tiny任务,测试移植结果 - 图5

按照上图指示,进行编译下载到开发板即可完成TencentOS tiny的测试,如下图所示,可以看到串口交替打印信息,表示两个任务正在进行调度,切换运行:

三、创建TencentOS tiny任务,测试移植结果 - 图6