xlmttkl
发表于 2025-4-23 11:04:27
很厉害
hhh402
发表于 2025-4-23 22:40:48
请问楼主:
#define task_delay(delay_ms) user_task.state=__LINE__;\
user_task.time=delay_ms;case __LINE__:if(user_task.time!=0)break;
//延时后继续向下,内部填入延时ms时间,等待时间后继续向下
__LINE__是在那里定义?什么意思?
王昱顺
发表于 2025-4-24 08:07:48
hhh402 发表于 2025-4-23 22:40
请问楼主:
#define task_delay(delay_ms) user_task.state=__LINE__;\
user_task ...
这个是keil自带的宏定义喔,用于替换成当前的行号,具体内容视频都讲了,可以看看视频,详细讲解视频已经放在一楼开头了
hhh402
发表于 2025-4-24 10:53:55
for语句与switch中的case语句嵌套在一起,没有语法错误吗?中途还用break跳出for循环,然后再返回for循环。
hhh402
发表于 2025-4-24 16:05:32
翻译了楼主首页的协程2:
_this_task=2;
if(task_num<Task_Max_Num)
switch(user_task.state)
{
case 0:
;
user_task.state=__LINE__;
user_task.time=1000;
case __LINE__:
if(user_task.time!=0)break;;
cnt1=0;
user_task.state = __LINE__;
case __LINE__:
for(_task_for_cnt = 1; _task_for_cnt--; cnt1++,user_task.state = __LINE__)
{
cnt2=0;
user_task.state = __LINE__;
case __LINE__:
for(_task_for_cnt = 1; _task_for_cnt--; cnt2++,user_task.state = __LINE__)
{
P02 = ~P02;//取反P02端口
user_task.state=__LINE__;
user_task.time=50;
case __LINE__:
if(user_task.time!=0)break;;
}
if(cnt2<3) break;//第二层for的判断条件,为1则返回for开头,为0则继续执行
P02 = 0;//强制给P02端口置高
user_task.state=__LINE__;
user_task.time=300;
case __LINE__:
if(user_task.time!=0)break;;
}
if(cnt1<5) break;//
if(1)user_task.state=0;
break;
}
为了方便看先不要管__LINE__的位置,中间这么多“case __LINE__:”,switch和for语句交织在一起,真的没有问题?
lhj
发表于 2025-4-24 19:41:17
学习了
王昱顺
发表于 2025-4-24 22:07:33
hhh402 发表于 2025-4-24 10:53
for语句与switch中的case语句嵌套在一起,没有语法错误吗?中途还用break跳出for循环,然后再返回for循环。 ...
逻辑很严谨的,并且还有三个拓展例程,都运行的相当好
大叶子
发表于 6 天前
一看,这个很给力,我果断下载例程,打开Keil,按照习惯,没改任何代码,直接编译没有成功,*** Error: CreateProcess failed, Command: 'C:\Users\Administrator\Desktop\AI8051U-DEMO-CODE-V1.2库\AI8051U专用库函数\独立例程\9使用协程完成多任务调度\Auto_Keil.exe'
Target not created.
Build Time Elapsed:00:00:00
怎么才能正常编译呢?
要不直接开发个,像类似小时钟树的工具吧!
王帅哥呀,一定要减轻使用门槛,这么好的理论,别荒废了。
王昱顺
发表于 6 天前
大叶子 发表于 2025-4-26 10:13
一看,这个很给力,我果断下载例程,打开Keil,按照习惯,没改任何代码,直接编译没有成功,*** Error: Cre ...
关闭Keil后,重新双击Auto_Keil.exe这个文件就可以了。
原因是这个小工具写入的是绝对地址,所以这个地址其实是我这边的地址
重新运行就能覆盖掉了
等我寻找一下怎么改成相对地址就好了
王昱顺
发表于 6 天前
大叶子 发表于 2025-4-26 10:13
一看,这个很给力,我果断下载例程,打开Keil,按照习惯,没改任何代码,直接编译没有成功,*** Error: Cre ...
2025年4月26日 11点27分
-Auto_Keil更新保存地址使用相对地址,以防止初次编译出错
目前已经更新为相对地址的Auto_Keil了,重新下载,再次编译就不会出现问题了