找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1426|回复: 15
打印 上一主题 下一主题
收起左侧

同个单片机中,程序是否是可以分时执行两段不同且完全独立的程序

  [复制链接]
跳转到指定楼层
楼主
ID:956872 发表于 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
{;}




分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:883242 发表于 2022-10-6 21:21 | 只看该作者
RTOS就是干这个的,任务虽然可以抢占时间,但是你写成纯时间片分时执行不同任务太轻松了。
回复

使用道具 举报

板凳
ID:213173 发表于 2022-10-6 22:16 | 只看该作者
MCU可以分时执行两段完全独立的子程序,但必须在主函数main内运行。main函数必须有,且是唯一的。
回复

使用道具 举报

地板
ID:624769 发表于 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
{
//第二段:
}


}





回复

使用道具 举报

5#
ID:8222 发表于 2022-10-6 22:50 | 只看该作者
不能有两个main()。你可以用两个while(i==1),while(i==2) 切换。
回复

使用道具 举报

6#
ID:155507 发表于 2022-10-6 22:50 | 只看该作者
当前的主流单片机,可以分时“执行多个任务”。
但注意的是,它是分时操作,也就是说,在某一时刻它只能做一件事。

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

回复

使用道具 举报

7#
ID:35873 发表于 2022-10-7 04:29 | 只看该作者
这比飞哥的狠活儿还要狠啊    好像只能有一个 main函数  楼主的想法可以实现   但一个程序中有两个主函数这个写法估计行不通
回复

使用道具 举报

8#
ID:401564 发表于 2022-10-7 07:16 | 只看该作者
除了外部增加的资源,比如ADC,定时器之类的,它可以在你主程序一边执行代码的时候一边动作
其它的,随便你什么多任务系统,它都是一个指令一个指令的去执行,不管是8051还是STM32
所以的多任务系统,只是MCU处理速度快了,让你感觉上是同步执行的而已
如果是跑系统的话,代码上是可以,A,B,C,D四个程序同时进行,但是,你"同时"进行的总时间是和ABCD顺序执行的时间是一样的
好处就是有一些优先级别而已
回复

使用道具 举报

9#
ID:956872 发表于 2022-10-7 08:18 | 只看该作者

我是想完全分开的两套程序。 就好比我两套程序先存储在外部FLSH,如果要执行第一套程序,通过程序自动就把第一套程序下载到单片机中执行,要执行第二套程序就下载第二套程序到单片机中。这样来回切换
回复

使用道具 举报

10#
ID:526108 发表于 2022-10-7 08:41 | 只看该作者
可以是可以,比较复杂,比如做可远程升级功能的产品一般都会把单片机划分两个区,升级区和用户程序区(升级区代码和用户程序区代码是两个独立的keil项目)。也就是说一个单片机上跑两个项目
回复

使用道具 举报

11#
ID:824490 发表于 2022-10-7 09:08 | 只看该作者
很久以前,在义隆单片机上有个功能貌似能实现楼主的功能,2个程序分别编译,一起写入:

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

回复

使用道具 举报

12#
ID:624769 发表于 2022-10-7 11:28 来自手机 | 只看该作者
PEB188 发表于 2022-10-7 08:18
我是想完全分开的两套程序。 就好比我两套程序先存储在外部FLSH,如果要执行第一套程序,通过程序自动就 ...

你要这么说的话,stc89c51,ea高电平就是内部存储启动 ,ea低电平,外部存储启动。
回复

使用道具 举报

13#
ID:1034262 发表于 2022-10-7 15:36 | 只看该作者
楼主可以了解一下RTOS(实时操作系统),或者用状态机、时间(信息)触发的多任务系统,这些都可以实现你想要的。
回复

使用道具 举报

14#
ID:888148 发表于 2022-10-7 22:42 | 只看该作者
ESP32双核的,你可以试试把程序执行在不同的核上面.
但是你这中断应该是共用的,做不到同时运行吧.
回复

使用道具 举报

15#
ID:390416 发表于 2022-10-9 00:00 | 只看该作者
人人学会单片机,所讲解的框架式编程,就是满足你这个想法而设计的
回复

使用道具 举报

16#
ID:235438 发表于 2022-10-9 01:10 | 只看该作者
这种最好上操作系统吧,也不是很麻烦,用习惯了比裸奔好用的多。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表