lzzasd
发表于 2024-5-9 13:20:41
tzz1983 发表于 2024-4-6 09:51
是的, 不适合新人, 还是直接用函数名调用比较容易
这个本身就是调用函数名来运行任务函数的
只是函数名以格构体的方式存储的
格构体内有任务时间间隔等参数
按照结构体数据编号逐次运行
最主要的是没有公共延迟函数
谁能补充下就很好用了
lzzasd
发表于 2024-5-9 13:34:47
liuyuhe 发表于 2024-4-24 17:45
如果任务的执行时间大于系统的轮询时间,那是先执行完当前的任务还是跳出当前任务执行下一个任务 ...
轮询时间是最小切换时间片
也就是说任务最小切换时间就是轮询时间
当任务小于轮询时间时任务结束后不会立即切换到下一个任务
而是等到轮询时间到来才切换
同样任务超过轮询时间也不会打断
等运行完后等轮询程序来调度
西红柿牛柳
发表于 2024-7-3 11:44:56
{:4_250:}
大锤子
发表于 2024-8-20 22:03:18
看了大佬们的讨论,感觉自己的知识实在太少了。
我有个工程打算用这种多任务调度方式,
使用sdcc实现,但是效果出乎意料,
能否帮忙看下:代码:
https://gitee.com/dchuizi/temperature-and-humidity.git
有帖子描述了问题显现:
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=10208
_NCY_
发表于 2024-10-2 08:34:09
这个方便确实方便,比RTOS简单。
但这不就跟一while到底,外加一堆cnt和if“切换任务”没本质区别了。
缺点是,一阻塞就死了,并不能高效利用cpu。
不如能抢占的rtos,毕竟在dma的阻塞等待时,
在漫长的waitbusy时,谁不想切换任务干点别的呢
hewayking
发表于 2024-11-25 11:03:39
我在STC8A8K64D4上用过这种结构,实质还是一个大循环只是大循环里函数,
设定了定时器0控制 多长时间函数执行一次而已(如果别的在执行也得等),
不是单纯的裸机循序执行而已。
本质就是大循环轮到我了我可以不执行(不需要频繁更新的让出时间给其他);
轮不到我只能等到轮到我。
跟IF(time1>=xx){hanshu1;} IF(time1>=xx){hanshu2;} 没有本质区别
lgnstar
发表于 2024-12-7 09:22:11
<p>感谢分享</p>
是三三啊
发表于 2024-12-16 17:17:37
<p>定时器调度和操作系统调度有什么区别啊</p>
scpcw
发表于 2025-2-12 22:24:25
大神呀,你唾弃我这个小白吧.我这个跑馬灯的程序结果就是P37,最后一个灯一直亮.试了一晚上了.
指点一下吧
static TASK_COMPONENTS Task_Comps[]=
{
//状态计数周期函数
{0, 500, 500, LED_Lamp}, /* task 1 Period: 1ms */
{0, 500, 500, test}, /* task 1 Period: 1ms */
/* Add new task here */
};
u8 Tasks_Max = sizeof(Task_Comps)/sizeof(Task_Comps);
//========================================================================
void LED_init(void)
{
LED_port=0; //做测试用,开机有全亮灯的动作.
}
//========================================================================
// 函数: Sample_Lamp
// 描述: 用户应用程序.
// 参数: None.
// 返回: None.
// 版本: V1.0, 2020-09-23
//========================================================================
void LED_Lamp(void)
{
u8 i;
delay_ms(200);
for(i=0;i<8;i++)
{
LED_port= ~(1<<i);
}
}
void test(void)
{
delay_ms(10);
}
scpcw
发表于 2025-2-12 22:29:45
把LED_lamp()函数改成这样好像看到苗头了..
while(1)
{
for(i=0;i<8;i++)
{
for(o=0x10;o!=0;o--)
{
for(m=0xff;m!=0;m--)
{
for(n=0xff;n!=0;n--);
}
}
P3=~(0x1<<i);
}
}