标题: 同个单片机中,程序是否是可以分时执行两段不同且完全独立的程序 [打印本页]

作者: PEB188    时间: 2022-10-6 20:28
标题: 同个单片机中,程序是否是可以分时执行两段不同且完全独立的程序
同一片单片机,程序是否是可以分时执行两段完全独立的程序。包括定时器中断,外部中断等。
第一段:void main()
{
while(1)
{
;
}
}
void TM0_Isr() interrupt 1
{;}
void INT1_Isr() interrupt 2
{;}



第二段:void main()
{
while(1)
{
;
}
}
void TM0_Isr() interrupt 1
{;}
void INT1_Isr() interrupt 2
{;}





作者: Hephaestus    时间: 2022-10-6 21:21
RTOS就是干这个的,任务虽然可以抢占时间,但是你写成纯时间片分时执行不同任务太轻松了。
作者: wulin    时间: 2022-10-6 22:16
MCU可以分时执行两段完全独立的子程序,但必须在主函数main内运行。main函数必须有,且是唯一的。
作者: 188610329    时间: 2022-10-6 22:37
bit MODE;

void main()
{
while(1)
{if(MODE)
{
//第一段:
}
else
{
//第二段:
}
}
}
void TM0_Isr() interrupt 1
{
if(MODE)
{
//第一段:
}
else
{
//第二段:
}


}
void INT1_Isr() interrupt 2
{
if(MODE)
{
//第一段:
}
else
{
//第二段:
}


}






作者: 温xyz    时间: 2022-10-6 22:50
不能有两个main()。你可以用两个while(i==1),while(i==2) 切换。
作者: angmall    时间: 2022-10-6 22:50
当前的主流单片机,可以分时“执行多个任务”。
但注意的是,它是分时操作,也就是说,在某一时刻它只能做一件事。

执行多个任务肯定没有问题,主要是它的资源足够用,严格来讲普通单片机是单线程的,执行多个任务严格意义上来讲并不是同时执行多任务,只不过是引因其速度快,在允许有时差的多个任务中,合理安排就会那个都不耽误,一个单片机实现多任务,如果你的任务要求完全同步可以通过多个单片机完成,或者虽然不要求完全同步,但任务耗用资源较多的也建议多个单片机来构建。


作者: jialishoushi    时间: 2022-10-7 04:29
这比飞哥的狠活儿还要狠啊    好像只能有一个 main函数  楼主的想法可以实现   但一个程序中有两个主函数这个写法估计行不通
作者: Y_G_G    时间: 2022-10-7 07:16
除了外部增加的资源,比如ADC,定时器之类的,它可以在你主程序一边执行代码的时候一边动作
其它的,随便你什么多任务系统,它都是一个指令一个指令的去执行,不管是8051还是STM32
所以的多任务系统,只是MCU处理速度快了,让你感觉上是同步执行的而已
如果是跑系统的话,代码上是可以,A,B,C,D四个程序同时进行,但是,你"同时"进行的总时间是和ABCD顺序执行的时间是一样的
好处就是有一些优先级别而已
作者: PEB188    时间: 2022-10-7 08:18
188610329 发表于 2022-10-6 22:37
bit MODE;

void main()

我是想完全分开的两套程序。 就好比我两套程序先存储在外部FLSH,如果要执行第一套程序,通过程序自动就把第一套程序下载到单片机中执行,要执行第二套程序就下载第二套程序到单片机中。这样来回切换
作者: 624353765    时间: 2022-10-7 08:41
可以是可以,比较复杂,比如做可远程升级功能的产品一般都会把单片机划分两个区,升级区和用户程序区(升级区代码和用户程序区代码是两个独立的keil项目)。也就是说一个单片机上跑两个项目
作者: 名字不是重点    时间: 2022-10-7 09:08
很久以前,在义隆单片机上有个功能貌似能实现楼主的功能,2个程序分别编译,一起写入:

●有两个具有R-Option功能的I/O引脚,通过R-Option功能可在两个或两个以上应用程序中放人同一单片机时,用一个输入脚来判断选择哪一个程序。也就是说,R-option功能就是在EM78P447S的某两个I/0脚上设置可选择的下拉电阻,从而通过用户是否外接下拉电阻(一般为510kΩ)来判断该脚的状态,进而判断运行哪一个程序;


作者: 188610329    时间: 2022-10-7 11:28
PEB188 发表于 2022-10-7 08:18
我是想完全分开的两套程序。 就好比我两套程序先存储在外部FLSH,如果要执行第一套程序,通过程序自动就 ...

你要这么说的话,stc89c51,ea高电平就是内部存储启动 ,ea低电平,外部存储启动。
作者: coody_sz    时间: 2022-10-7 15:36
楼主可以了解一下RTOS(实时操作系统),或者用状态机、时间(信息)触发的多任务系统,这些都可以实现你想要的。
作者: yanjian    时间: 2022-10-7 22:42
ESP32双核的,你可以试试把程序执行在不同的核上面.
但是你这中断应该是共用的,做不到同时运行吧.
作者: 人人学会单片机    时间: 2022-10-9 00:00
人人学会单片机,所讲解的框架式编程,就是满足你这个想法而设计的
作者: 祥子陈    时间: 2022-10-9 01:10
这种最好上操作系统吧,也不是很麻烦,用习惯了比裸奔好用的多。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1