打印
[APM32F4]

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

[复制链接]
91|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ddllxxrr|  楼主 | 2025-7-28 05:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 ddllxxrr 于 2025-7-28 05:43 编辑

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

其核心是定时器中断时记数。然后主程序根据旗标来执行。
主函数:
while (1)
    {
        //Delay();
                          if(tick > 100)
                                {
                                        if( task1flag==0)
                                        {
                                        BOARD_LED_Toggle(LED2);
                                        BOARD_LED_Off(LED3);
                                        task1flag = 1;
                                        }                                                
                                       
                                }
                                if(tick > 200)
                                {
                      if(task2flag==0)
                                        {
                                        BOARD_LED_Toggle(LED3);
                                        BOARD_LED_Off(LED2);
                                        task2flag = 1;
                                        }
                                }
                                if(tick > 300)
                                {
                                        if(task3flag==0)
                                        {
                                        task3flag = 1;        
                                        printf("Hello world!!!!!\n\r");
                                        }
                                }
                                 if(tick > 400)
        {
                                        tick = 0;
                                         task1flag=0;
                                         task2flag=0;
                                         task3flag=0;
                                }                                       
//        for(i = 0; i < sizeof(txBuf); i++)
//        {
//            while(USART_ReadStatusFlag(USART1, USART_FLAG_TXBE) == RESET);
//            USART_TxData(USART1, txBuf[i]);
//        }
//        //BOARD_LED_Toggle(LED2);
    }
初始化代码:
uint8_t i;
    USART_Config_T USART_ConfigStruct;

    BOARD_LED_Config(LED2);
    BOARD_LED_Config(LED3);

    USART_ConfigStruct.baudRate = 115200;
    USART_ConfigStruct.hardwareFlow = USART_HARDWARE_FLOW_NONE;
    USART_ConfigStruct.mode = USART_MODE_TX;
    USART_ConfigStruct.parity = USART_PARITY_NONE;
    USART_ConfigStruct.stopBits = USART_STOP_BIT_1;
    USART_ConfigStruct.wordLength = USART_WORD_LEN_8B;
    BOARD_COM_Config(COM1, &USART_ConfigStruct);

    SystemCoreClockUpdate();
    SysTick_Config(SystemCoreClock / 1000*16);
        
          printf("Hello world!!!!!\n\r");




tick中断
void SysTick_Handler(void)
{
    tick++;
}



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


研究了半天操作系统。我得出的结论是。操作系统之所以要是因为系统的并行,就是在做一件事我还可以做另一件事。而前后台系统只能做一件事。

使用特权

评论回复
沙发
银河漫步| | 2025-7-28 17:45 | 只看该作者
这就是最原始的分时复用的操作系统吧

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

2403

主题

6995

帖子

68

粉丝