专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
PIC单片机
请教一下,使用PICC如何自己重定位程序在flash中的位置?
2020-02-10 08:51
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
51单片机
9008
11
11
主要是想在PIC16F886上实现bootloader,但不知道应该如何实现程序位置的定位。
小弟对PICC编译的过程理解不深,猜测是不是只要更改PICC的某个文件,就可以自行规定LINKER的行为?
请教有经验的朋友,究竟应该如何操作,谢谢
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
joylight
1楼-- · 2020-02-11 07:41
仔细看了您写的方法,但是遇到了一个问题
我写的程序代码4K多一点,用PICC9.5编译后,发现生成的.hex文件不是从头到尾排列的,而是中间空了两块没有程序。
这就很郁闷了,如果我想将两个.hex文件合起来(功能程序和引导程序分别形成一个project编译,再将两个.hex文件手工合起来),那就需要有一块连续的没有写程序的flash。但是现在整个flash空间好像都有代码,而不是将代码从flash的0000位置顺序往下排。请问应该如何处理?
默认情况下PICC编译是如何定位代码在flash中的位置的?有特殊的文件指示编译器如何动作吗?
加载中...
joylight
2楼-- · 2020-02-11 08:49
即使不手工合成.hex文件,用引导的方式,也需要有一块空的flash用来存放更新后的程序。
但程序一大了,程序在flash中的定位就感觉“乱了”。
加载中...
joylight
3楼-- · 2020-02-11 11:44
精彩回答 2 元偷偷看……
加载中...
joylight
4楼-- · 2020-02-11 16:55
.hex文件应该是搞错了,新情况如下:
1、功能程序无偏移时,从0x0000开始可以正常运行。说明功能程序没有问题,也不存在运行过程中堆栈溢出的问题。
2、引导程序,代码如下,跳转和中断重定位经过测试都是正常的。
3、引导程序+功能程序(分别编译,生成两个.hex文件,手工合成后下载),其中功能程序编译时偏移到0x1000,开始功能程序还能运行一段,一旦使能定时器中断,程序就好像复位了,又从头执行。
难道是新增的引导程序加重了堆栈的负担?但引导的代码中也没有CALL和中断啊,应该不会触发压栈啊。
0x0000-0xFFF的代码如下:
0000 MOVLW 0
0001 MOVWF 0xa
0002 GOTO 0x7
0003
0004 BSF 0xa,0x4
0005 BCF 0xa,0x3
0006 GOTO 0x4
0007 BCF 0xa,0x4
0008 BCF 0xa,0x3
0009 GOTO 0x7f9
.
空白
.
07F9 BSF 0xa,0x4
07FA BCF 0xa,0x3
07FB GOTO 0
07FC CLRF 0x3
07FD BCF 0xa,0x4
07FE BCF 0xa,0x3
07FF GOTO 0
.
空白
.
1000 功能程序
加载中...
上一页
1
2
一周热门
更多
>
相关问题
PIC单片机不同的IO口驱动74HC573驱动共阴极的数码管,有的段不亮
1 个回答
一种简单精确的pic延时方法
21 个回答
谁熟悉PIC的产品发布时间的,帮看看PIC18F47K40啥版本IDE能开发
12 个回答
求AN1078对应的源代码下载地址
5 个回答
PIC单片机应用技巧
4 个回答
串口无法连续接收数据
2 个回答
求助:dsPIC33F串口通信,如何发送字符串
4 个回答
PIC45K40 IOC(interrupt-on-change)功能
2 个回答
相关文章
一种用PIC单片机主时钟驱动的老式挂钟
0个评论
×
关闭
采纳回答
向帮助了您的网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
PIC单片机
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
关闭
您已邀请
15
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
我写的程序代码4K多一点,用PICC9.5编译后,发现生成的.hex文件不是从头到尾排列的,而是中间空了两块没有程序。
这就很郁闷了,如果我想将两个.hex文件合起来(功能程序和引导程序分别形成一个project编译,再将两个.hex文件手工合起来),那就需要有一块连续的没有写程序的flash。但是现在整个flash空间好像都有代码,而不是将代码从flash的0000位置顺序往下排。请问应该如何处理?
默认情况下PICC编译是如何定位代码在flash中的位置的?有特殊的文件指示编译器如何动作吗?
但程序一大了,程序在flash中的定位就感觉“乱了”。
1、功能程序无偏移时,从0x0000开始可以正常运行。说明功能程序没有问题,也不存在运行过程中堆栈溢出的问题。
2、引导程序,代码如下,跳转和中断重定位经过测试都是正常的。
3、引导程序+功能程序(分别编译,生成两个.hex文件,手工合成后下载),其中功能程序编译时偏移到0x1000,开始功能程序还能运行一段,一旦使能定时器中断,程序就好像复位了,又从头执行。
难道是新增的引导程序加重了堆栈的负担?但引导的代码中也没有CALL和中断啊,应该不会触发压栈啊。
0x0000-0xFFF的代码如下:
0000 MOVLW 0
0001 MOVWF 0xa
0002 GOTO 0x7
0003
0004 BSF 0xa,0x4
0005 BCF 0xa,0x3
0006 GOTO 0x4
0007 BCF 0xa,0x4
0008 BCF 0xa,0x3
0009 GOTO 0x7f9
.
空白
.
07F9 BSF 0xa,0x4
07FA BCF 0xa,0x3
07FB GOTO 0
07FC CLRF 0x3
07FD BCF 0xa,0x4
07FE BCF 0xa,0x3
07FF GOTO 0
.
空白
.
1000 功能程序
一周热门 更多>