打印
[51单片机]

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

[复制链接]
手机看帖
扫描二维码
随时随地手机跟帖
41
sdwys| | 2014-1-11 08:34 | 只看该作者 回帖奖励 |倒序浏览
高手奇思妙想。

使用特权

评论回复
42
fzy_666| | 2014-1-11 11:13 | 只看该作者
可以的,楼主先自己开发一个51芯片的操作系统,然后把这两个HEX文件生成可执行文件,就跟Win下面的安装文件一下,先按装一下,然后同进打开这两个文件,就能同时执行了。。。。:lol

使用特权

评论回复
43
msblast| | 2014-1-11 11:35 | 只看该作者
ocon 发表于 2014-1-10 18:44
你水平这么高当然可以,写个在51上运行的51模拟器,简单得很

:lol这个可以有

使用特权

评论回复
44
上大人孔乙己|  楼主 | 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来回切换。

使用特权

评论回复
45
gaoyiyiyi| | 2014-1-11 12:15 | 只看该作者
上大人孔乙己 发表于 2014-1-11 12:01
我的想法是,假设将HEX1加载到0x4000这个起始地址上,第二个HEX2加载到0x8000这个地址上。第三个HEX3(用于 ...

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

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

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
上大人孔乙己 + 1
46
ningling_21| | 2014-1-11 12:38 | 只看该作者
上大人孔乙己 发表于 2014-1-10 21:53
嗯。是这样的:写一个蜂鸣器程序,一个流水灯程序。分别编译生成两个HEX文件。现在任务是:设法把这两个h ...

那不就2个程序吗,哪里需要第三个程序呢?

使用特权

评论回复
47
lvsnjust| | 2014-1-11 16:15 | 只看该作者
好东西,值得收藏

使用特权

评论回复
48
forrest11| | 2014-1-11 20:10 | 只看该作者
上大人孔乙己 发表于 2014-1-10 23:22
“可以放在两个不同的程序区”是说把两个HEX文件放在不同的区域?还是说直接重新再把两个程序和调度程序 ...

这个问题真的是难,且不知目的何在。
你说的方法,两种都可行。但Hex肯定不能直接用的,至少PC跳转一定要改的。
不会是老师让你真的做吧?知道怎么考虑就行了。

使用特权

评论回复
49
renwocai| | 2014-1-11 21:05 | 只看该作者
上大人孔乙己 发表于 2014-1-11 12:01
我的想法是,假设将HEX1加载到0x4000这个起始地址上,第二个HEX2加载到0x8000这个地址上。第三个HEX3(用于 ...

别想什么地址跳转了,再这么想就废了,没看到大家都是调侃的语气么。
你老师的意思,就是要你完成两个任务,这需要程序逻辑和时序上的设计,而不是以上你想的这些乱七八糟的东西。

使用特权

评论回复
50
呆板书生| | 2014-1-12 15:21 | 只看该作者
如果真正能用调度hex,那要考虑的事情太多了,寄存器的保存,程序中所有跳转都不使用绝对地址等,资源的保护和互锁,等等,这些都不是51的任务。

使用特权

评论回复
51
dota_yy| | 2014-1-12 18:30 | 只看该作者
大一就有么有深度了:)
瞎侃两句
函数都是有入口地址的吧
在写程序 的时候看能不能直接在两个子函数的最后改写sp
实现灯和蜂鸣器的轮流操作

使用特权

评论回复
52
px123zx| | 2014-1-14 12:32 | 只看该作者
这怎么可能 直接把两个程序写一起就好了啊

使用特权

评论回复
53
msblast| | 2014-1-14 12:56 | 只看该作者
程序金左手 发表于 2014-1-13 08:41
你们不用笑楼主,,每一个革命性的创新,,一开始都被大家笑话的,,,
我觉得楼主的想象力非常丰富,,加 ...

:lol
理解有误吧
没看到很多人都在给LZ支招吗
关键是出题人的意思很难揣测,究竟是不是楼上诸位想像的那样,很难说。。。

使用特权

评论回复
54
chenbb8| | 2014-1-14 12:57 | 只看该作者
LZ先写一个蜂鸣器程序,生成HEX1,再写一个LED程序生成HEX2,然后写一个蜂鸣器+LED的程序生成HEX3
将HEX3写入单片机演示给老师看,然后提交HEX1和HEX2,说是不知道怎么 就同时下载进去运行了

使用特权

评论回复
55
结字空林| | 2014-1-14 13:09 | 只看该作者
想法不错,能实现你也是牛人了

使用特权

评论回复
56
pangencao| | 2014-1-14 21:07 | 只看该作者
用汇编写可以的,hex1正常的流水的灯程序,其功能程序段入口地址为addr1,
hex2只写蜂鸣器主体程序(相当于一个函数),hex2下载到特定地址(addr2),
在流水灯程序结尾跳转到addr2,蜂鸣器程序结尾跳转到addr1即可。
注意hex2程序的中有些相对跳转指令使用时注意些,不能跳出边界。然后分段烧写,100%可以实现。难度一点不大,且不需要调度程序。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
上大人孔乙己 + 1
57
h615| | 2014-1-16 10:07 | 只看该作者
不知道是否可以这样
可以反汇编,然后做个地址跳转上去
不过不能有中断,定时器

使用特权

评论回复
58
听雨虚竹| | 2014-1-16 18:06 | 只看该作者
楼主使用双核51MCU啊!

使用特权

评论回复
59
国士无双| | 2014-1-17 13:38 | 只看该作者
怎么会有这个想法,两个文件写一起,分时段控制灯和蜂鸣器,你试试。

使用特权

评论回复
60
上大人孔乙己|  楼主 | 2014-2-7 16:05 | 只看该作者
现在再来看这个帖子,不知道是不是我原来表述有问题,但是现在看来我原先的想法是实现了。跟原来的设想一样,把HEX1烧写到地址1,HEX2烧写到地址2,然后另外写一个定时器中断程序,一个汇编的寄存器保护程序,每一次进入中断就保护寄存器然后跳转到另一个任务,快速反复交替。但我是在LPC2103上实现的,因为手头没有51,但是我想如果51能选择不擦除烧录,51也可以实现这个功能。多谢大家,如果是我原来表述有误让大家这么费神,那就对不住啦。真的很感谢

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则