[51单片机] 如何把两个hex烧入51机中并同时运行?

[复制链接]
13538|66
sdwys 发表于 2014-1-11 08:34 | 显示全部楼层
高手奇思妙想。
fzy_666 发表于 2014-1-11 11:13 | 显示全部楼层
可以的,楼主先自己开发一个51芯片的操作系统,然后把这两个HEX文件生成可执行文件,就跟Win下面的安装文件一下,先按装一下,然后同进打开这两个文件,就能同时执行了。。。。:lol
msblast 发表于 2014-1-11 11:35 | 显示全部楼层
ocon 发表于 2014-1-10 18:44
你水平这么高当然可以,写个在51上运行的51模拟器,简单得很

:lol这个可以有
 楼主| 上大人孔乙己 发表于 2014-1-11 12:01 | 显示全部楼层
我的想法是,假设将HEX1加载到0x4000这个起始地址上,第二个HEX2加载到0x8000这个地址上。第三个HEX3(用于调度任务1,2)加载到0x6000这个地址上。然后在0地址(上电后单片机取第一条指令的位置)放置一条跳转到HEX3的指令。跳转到HEX3(任务3)做的事情就是打开定时器中断,设置一个时钟节拍的中断然后CPU交给任务1,每一个节拍中断进入服务子程序,任务1将CPU交给任务2,同理下一个中断由任务2将CPU交给任务1,这样子由中断控制任务1任务2来回切换。
gaoyiyiyi 发表于 2014-1-11 12:15 | 显示全部楼层
上大人孔乙己 发表于 2014-1-11 12:01
我的想法是,假设将HEX1加载到0x4000这个起始地址上,第二个HEX2加载到0x8000这个地址上。第三个HEX3(用于 ...

别想了,这种问题你现在想多了伤身。

让你们那坑爹老师自己去做吧。(如果你没理解错他题目意思的话)

评分

参与人数 1威望 +1 收起 理由
上大人孔乙己 + 1

查看全部评分

ningling_21 发表于 2014-1-11 12:38 | 显示全部楼层
上大人孔乙己 发表于 2014-1-10 21:53
嗯。是这样的:写一个蜂鸣器程序,一个流水灯程序。分别编译生成两个HEX文件。现在任务是:设法把这两个h ...

那不就2个程序吗,哪里需要第三个程序呢?
lvsnjust 发表于 2014-1-11 16:15 | 显示全部楼层
好东西,值得收藏
forrest11 发表于 2014-1-11 20:10 | 显示全部楼层
上大人孔乙己 发表于 2014-1-10 23:22
“可以放在两个不同的程序区”是说把两个HEX文件放在不同的区域?还是说直接重新再把两个程序和调度程序 ...

这个问题真的是难,且不知目的何在。
你说的方法,两种都可行。但Hex肯定不能直接用的,至少PC跳转一定要改的。
不会是老师让你真的做吧?知道怎么考虑就行了。
renwocai 发表于 2014-1-11 21:05 | 显示全部楼层
上大人孔乙己 发表于 2014-1-11 12:01
我的想法是,假设将HEX1加载到0x4000这个起始地址上,第二个HEX2加载到0x8000这个地址上。第三个HEX3(用于 ...

别想什么地址跳转了,再这么想就废了,没看到大家都是调侃的语气么。
你老师的意思,就是要你完成两个任务,这需要程序逻辑和时序上的设计,而不是以上你想的这些乱七八糟的东西。
呆板书生 发表于 2014-1-12 15:21 | 显示全部楼层
如果真正能用调度hex,那要考虑的事情太多了,寄存器的保存,程序中所有跳转都不使用绝对地址等,资源的保护和互锁,等等,这些都不是51的任务。
dota_yy 发表于 2014-1-12 18:30 | 显示全部楼层
大一就有么有深度了:)
瞎侃两句
函数都是有入口地址的吧
在写程序 的时候看能不能直接在两个子函数的最后改写sp
实现灯和蜂鸣器的轮流操作
px123zx 发表于 2014-1-14 12:32 | 显示全部楼层
这怎么可能 直接把两个程序写一起就好了啊
msblast 发表于 2014-1-14 12:56 | 显示全部楼层
程序金左手 发表于 2014-1-13 08:41
你们不用笑楼主,,每一个革命性的创新,,一开始都被大家笑话的,,,
我觉得楼主的想象力非常丰富,,加 ...

:lol
理解有误吧
没看到很多人都在给LZ支招吗
关键是出题人的意思很难揣测,究竟是不是楼上诸位想像的那样,很难说。。。
chenbb8 发表于 2014-1-14 12:57 | 显示全部楼层
LZ先写一个蜂鸣器程序,生成HEX1,再写一个LED程序生成HEX2,然后写一个蜂鸣器+LED的程序生成HEX3
将HEX3写入单片机演示给老师看,然后提交HEX1和HEX2,说是不知道怎么 就同时下载进去运行了
结字空林 发表于 2014-1-14 13:09 | 显示全部楼层
想法不错,能实现你也是牛人了
pangencao 发表于 2014-1-14 21:07 来自手机 | 显示全部楼层
用汇编写可以的,hex1正常的流水的灯程序,其功能程序段入口地址为addr1,
hex2只写蜂鸣器主体程序(相当于一个函数),hex2下载到特定地址(addr2),
在流水灯程序结尾跳转到addr2,蜂鸣器程序结尾跳转到addr1即可。
注意hex2程序的中有些相对跳转指令使用时注意些,不能跳出边界。然后分段烧写,100%可以实现。难度一点不大,且不需要调度程序。

评分

参与人数 1威望 +1 收起 理由
上大人孔乙己 + 1

查看全部评分

h615 发表于 2014-1-16 10:07 | 显示全部楼层
不知道是否可以这样
可以反汇编,然后做个地址跳转上去
不过不能有中断,定时器
听雨虚竹 发表于 2014-1-16 18:06 | 显示全部楼层
楼主使用双核51MCU啊!
国士无双 发表于 2014-1-17 13:38 | 显示全部楼层
怎么会有这个想法,两个文件写一起,分时段控制灯和蜂鸣器,你试试。
 楼主| 上大人孔乙己 发表于 2014-2-7 16:05 | 显示全部楼层
现在再来看这个帖子,不知道是不是我原来表述有问题,但是现在看来我原先的想法是实现了。跟原来的设想一样,把HEX1烧写到地址1,HEX2烧写到地址2,然后另外写一个定时器中断程序,一个汇编的寄存器保护程序,每一次进入中断就保护寄存器然后跳转到另一个任务,快速反复交替。但我是在LPC2103上实现的,因为手头没有51,但是我想如果51能选择不擦除烧录,51也可以实现这个功能。多谢大家,如果是我原来表述有误让大家这么费神,那就对不住啦。真的很感谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部