SIEMENS河北省沧州市 西门子代理商——西门子华北一级总代理
| 更新时间 2024-11-16 07:00:00 价格 请来电询价 西门子总代理 PLC 西门子一级代 驱动 西门子代理商 伺服电机 联系电话 15903418770 联系手机 15915421161 联系人 张经理 立即询价 |
详细介绍
11裸机编程与RTOS 的区别
1.1 裸机程序基本框架 /*主函数*/int main(){ init();//一些初始化 /*死循环*/ while(1) { do_something_1();//执行一些逻辑 do_something_2(); }//循环执行}
/*中断服务函数*/IRQ_Handler(){ set_flag();//简短的标记操作} /*主函数*/int main(){ init();//一些初始化 xTaskCreate(); vTaskStartScheduler(); //启动调度器}
/*子任务1(死循环)*/void task1(){ while(1) { do_something_1();//执行一些逻辑(如采集传感器信息) vTaskDelay(); }}
/*子任务2(死循环)*/void task2(){ while(1) { do_something_2();//执行一些逻辑(如执行电机运动) vTaskDelay(); }}
/*中断服务函数*/IRQ_Handler(){ set_event();//触发事件、信号量等}
1.1 裸机程序基本框架
/*中断服务函数*/IRQ_Handler(){ set_flag();//简短的标记操作}
单片机裸机编程的思路比较简单,就是一个死循环,程序依次执行while(1)中的各条语句,循环往复即可,需要处理某些紧急事件时,通过中断服务函数来打断while(1)的执行。
裸机编程虽然简单,但只能在一个循环中执行各种裸机,第一项功能执行完后才能执行第二项功能,就好比有多个人在轮流干活,CPU的利用率不高,不能处理并行逻辑。
1.2 RTOS程序基本框架/*子任务1(死循环)*/void task1(){ while(1) { do_something_1();//执行一些逻辑(如采集传感器信息) vTaskDelay(); }}
/*子任务2(死循环)*/void task2(){ while(1) { do_something_2();//执行一些逻辑(如执行电机运动) vTaskDelay(); }}
/*中断服务函数*/IRQ_Handler(){ set_event();//触发事件、信号量等}
单片机引入RTOS,可以将各个功能模块分别设计为单独的任务,每个任务都是一个死循环,就好比有多个人在同时干活,这样CPU的利用率就提高了,并且可以处理一些并行逻辑。
单片机只有一个CPU(核),那怎么让多个人同时干活呢?其实每个子任务虽然都是死循环,但并不是每个子任务一直都在执行,每个子任务在执行期间,可能需要延时,也可能需要等另一个任务的数据到来,所有,在某个任务在等待的时候,CPU就可以停止此任务,然后切换到其它任务执行,这样看起来就是多个人在同时干活了。
相关产品