因为 c 无法实现所有 汇编的功能。
不仅仅是 ucos, freeRTOS, linux ,底层都有汇编代码,就是你的裸机程序,开机启动部分也是 汇编代码。
芯片一开机只能运行汇编代码,汇编准备好了 c 语言运行环境,才能运行 c 代码
通常说是确保切换任务的高效性,包括部分中断纯C完成不了。
某乎有同样的问题,有个回答很好。其中有部分说法:纯C语言不能保存CPU内指定通用寄存器的内容,而汇编可以(至于为啥,还没弄明白)。所以传统OS系统底层任务切换只用用汇编。当然现代OS是可以纯C的。
ucos这种实时操作系统的系统底层切换任务,用C做不到,所以只能用汇编;另外汇编是对硬件操作效率更高,执行更快。