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

1. 修改部分代码

修改stm32l0xx_it.c的中断函数

在stm32l0xx_it.c(board\NUCLEO_L073RZ\Src目录下)文件中包含 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 512
  4. void task1(void *pdata);
  5. osThreadDef(task1, osPriorityNormal, 1, TASK1_STK_SIZE);
  6. //task2
  7. #define TASK2_STK_SIZE 512
  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 _write(int fd, char *ptr, int len)
  30. {
  31. (void)HAL_UART_Transmit(&huart2, (uint8_t *)ptr, len, 0xFFFF);
  32. return len;
  33. }

如图:三、创建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\board\NUCLEO_L073RZ目录下,找到makefile文件,该目录下打开cmd命令窗口,输入make命令进行编译,得到bin文件,然后将bin文件通过下载工具下载到开发板即可完成TencentOS tiny的测试,如下图所示,可以看到串口交替打印信息,表示两个任务正在进行调度,切换运行:

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