[APM32F4] 【APM32F402R Micro-EVB开发板测评】4,基于时间触发的分时系统

[复制链接]
 楼主| ddllxxrr 发表于 2025-7-28 05:39 | 显示全部楼层 |阅读模式
本帖最后由 ddllxxrr 于 2025-7-28 05:43 编辑

最近我研究一个不用操作系统然后可以实现操作系统一样的功能的最简系统。研究的结果还是得用操作系统。
但碰到一个简单的只要时间片运行的还是可以用一下基于时间触发的操作系统的。
该系统占资源极少。
我的方法是用TICK计数,计100个任务一运行,然后200个任务2运行,然后300个任务3运行。
任务一:点LED
任务二:点LED
任务三:打印一个字符串

其核心是定时器中断时记数。然后主程序根据旗标来执行。
主函数:
  1. while (1)
  2.     {
  3.         //Delay();
  4.                           if(tick > 100)
  5.                                 {
  6.                                         if( task1flag==0)
  7.                                         {
  8.                                         BOARD_LED_Toggle(LED2);
  9.                                         BOARD_LED_Off(LED3);
  10.                                         task1flag = 1;
  11.                                         }                                                
  12.                                        
  13.                                 }
  14.                                 if(tick > 200)
  15.                                 {
  16.                       if(task2flag==0)
  17.                                         {
  18.                                         BOARD_LED_Toggle(LED3);
  19.                                         BOARD_LED_Off(LED2);
  20.                                         task2flag = 1;
  21.                                         }
  22.                                 }
  23.                                 if(tick > 300)
  24.                                 {
  25.                                         if(task3flag==0)
  26.                                         {
  27.                                         task3flag = 1;        
  28.                                         printf("Hello world!!!!!\n\r");
  29.                                         }
  30.                                 }
  31.                                  if(tick > 400)
  32.         {
  33.                                         tick = 0;
  34.                                          task1flag=0;
  35.                                          task2flag=0;
  36.                                          task3flag=0;
  37.                                 }                                       
  38. //        for(i = 0; i < sizeof(txBuf); i++)
  39. //        {
  40. //            while(USART_ReadStatusFlag(USART1, USART_FLAG_TXBE) == RESET);
  41. //            USART_TxData(USART1, txBuf[i]);
  42. //        }
  43. //        //BOARD_LED_Toggle(LED2);
  44.     }
初始化代码:
  1. uint8_t i;
  2.     USART_Config_T USART_ConfigStruct;

  3.     BOARD_LED_Config(LED2);
  4.     BOARD_LED_Config(LED3);

  5.     USART_ConfigStruct.baudRate = 115200;
  6.     USART_ConfigStruct.hardwareFlow = USART_HARDWARE_FLOW_NONE;
  7.     USART_ConfigStruct.mode = USART_MODE_TX;
  8.     USART_ConfigStruct.parity = USART_PARITY_NONE;
  9.     USART_ConfigStruct.stopBits = USART_STOP_BIT_1;
  10.     USART_ConfigStruct.wordLength = USART_WORD_LEN_8B;
  11.     BOARD_COM_Config(COM1, &USART_ConfigStruct);

  12.     SystemCoreClockUpdate();
  13.     SysTick_Config(SystemCoreClock / 1000*16);
  14.         
  15.           printf("Hello world!!!!!\n\r");




tick中断
  1. void SysTick_Handler(void)
  2. {
  3.     tick++;
  4. }



代码经过编译下到开发板。可以运行。我想这个编程思想我以后肯定能用上。在一些极小需求又要象操作系统一下稳定的情况下可以一试。


研究了半天操作系统。我得出的结论是。操作系统之所以要是因为系统的并行,就是在做一件事我还可以做另一件事。而前后台系统只能做一件事。
银河漫步 发表于 2025-7-28 17:45 | 显示全部楼层
这就是最原始的分时复用的操作系统吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:http://shop34182318.taobao.com/ http://shop562064536.taobao.com

2403

主题

6994

帖子

68

粉丝
快速回复 在线客服 返回列表 返回顶部