共2条
1/1 1 跳转至页
mega128,bootloader,application mega128怎样将一个程序分两段分别烧入bootloader和application
问
用的是iccAVR和progpony,谢谢!
答 1:
可不可以在程序里指定某部分从哪个flashrom地址开始烧写?有相应的伪指令或者其他什么手段吗?谢!!
答 2:
先烧BOOTER,再下载
答 3:
问题是放到boot区的不一定有全部的boot功能啊就是因为放不下,才想放一部分到application里去。
可以用下面这个直接在源代码里面指定程序段写入的绝对地址吗?
# pragma abs_address:<address>
# pragma end_abs_address
答 4: 可以指定能否把全部的代码合并为一个hex文件,再烧录。 答 5: 我就是只有一个hex文件
我是将源代码分成两部分,用此在源程序里指定了两个不同的起始地址(分别在boot和application)但还未能烧录成功。 答 6: 能否介绍一下您的编译方式和烧录方式。大家一起想杨办法 答 7: 用iccAVR编译,ponyprog烧录的! 答 8: 分别编译APPLICATION和BOOTLOADER1、分别编译APPLICATION和BOOTLOADER,成两个HEX文件(至少保证生成的BIN文件的大小和小于你的MCU-FLASH值)
2、用文本编辑器(如UE)打开两个HEX文件
3、新建一个文本文件,另存为XXXX.HEX
4、把那两个HEX文件都复制到这个XXX.HEX中
5、删掉两行相同的":00000001FF"(或是别的)
6、保存
7、用PONYPRO2000打开
8、完成 答 9: 如果可以的话就好了,可是分别编译的话,就要各自include必需的*.h文件,这样即使仅有boot部分生成的hex文件也会太大,4k放不下。
这也是最初想要烧写一部分在application里面的原因。
*.h文件是用c写的,这样是不是只能用汇编重新编写*.h才能解决? 答 10: inculde .h并不会增加目标文件长度 答 11: Asnake的办法比较好,试试 答 12: Asnake的办法中,烧录以后boot和application部分能相互识别吗?能的话,通过什么识别?
好像不能用call一个绝对地址来实现跳转(调用) 答 13: ICCAVR中没有段定位吗?在IAR中可以通过*.XCL文件非常方便的实现段定位,ICCAVR也应该有吧 答 14: 烧录后的boot和application认别应该是通过编程熔丝位进行的。 答 15: 我是这样认为的,大家看一看是否正确noday问题:想从boot调用application里的函数,可以实现吗?
从芯片的原理来看,两个bootloader和application两个部分还是编一编址的,只是下载编程(或自编程)机制按照熔丝位的设定进行,但在运行时两个部分应该是一样的,因此应该是可以从boot调用application里的函数。
以上仅仅只是我的想法,最终应该以实验结果为准。 答 16: 重新描述一下问题吧,前面说的比较乱,^_^ 最初直接通过#pragma abs_address <绝对地址> 指定,想把一个hex文件一次性分两部分烧到app和boot里面指定的地址。但是发现只有指定到app区域的写入成功,到boot区的没有写入。
从生成的hex文件来看,本来指定到0x1e000的程序被写到了0xe000处,不知为何?
( 注:ICCAVR编译器里面的memory size是以byte来计的,mage128的128kbyte flash rom即0x20000。这样选择boot区为8k byte时,即是0x1e000开始. ) 答 17: 把测试代码贴出来。> 从生成的hex文件来看,本来指定到0x1e000的程序被写到了0xe000处,不知为何?
怎么得到?能否把源程序贴出来。
>注:ICCAVR编译器里面的memory size是以byte来计的,mage128的128kbyte flash rom即0x20000。这样选择boot区为8k byte时,即是0x1e000开始. )
看不明白。
选择boot为4KWord,为8kB,应该从0x1000开始放中断向量的。0x1e000开始是什么意思? 答 18: 高64KFLASH是要通过寄存器RAMPZ设置的。 答 19: 0x1e000是boot区(4k word)的起始地址啊我的程序结构如下:
#pragma abs_address:0x8000 //指定到application区
... 程序段1
#pragma end_abs_address
#pragma abs_address:0x1e000 //指定到boot区
...程序段2
#pragma end_abs_address
可以用下面这个直接在源代码里面指定程序段写入的绝对地址吗?
# pragma abs_address:<address>
# pragma end_abs_address
答 4: 可以指定能否把全部的代码合并为一个hex文件,再烧录。 答 5: 我就是只有一个hex文件
我是将源代码分成两部分,用此在源程序里指定了两个不同的起始地址(分别在boot和application)但还未能烧录成功。 答 6: 能否介绍一下您的编译方式和烧录方式。大家一起想杨办法 答 7: 用iccAVR编译,ponyprog烧录的! 答 8: 分别编译APPLICATION和BOOTLOADER1、分别编译APPLICATION和BOOTLOADER,成两个HEX文件(至少保证生成的BIN文件的大小和小于你的MCU-FLASH值)
2、用文本编辑器(如UE)打开两个HEX文件
3、新建一个文本文件,另存为XXXX.HEX
4、把那两个HEX文件都复制到这个XXX.HEX中
5、删掉两行相同的":00000001FF"(或是别的)
6、保存
7、用PONYPRO2000打开
8、完成 答 9: 如果可以的话就好了,可是分别编译的话,就要各自include必需的*.h文件,这样即使仅有boot部分生成的hex文件也会太大,4k放不下。
这也是最初想要烧写一部分在application里面的原因。
*.h文件是用c写的,这样是不是只能用汇编重新编写*.h才能解决? 答 10: inculde .h并不会增加目标文件长度 答 11: Asnake的办法比较好,试试 答 12: Asnake的办法中,烧录以后boot和application部分能相互识别吗?能的话,通过什么识别?
好像不能用call一个绝对地址来实现跳转(调用) 答 13: ICCAVR中没有段定位吗?在IAR中可以通过*.XCL文件非常方便的实现段定位,ICCAVR也应该有吧 答 14: 烧录后的boot和application认别应该是通过编程熔丝位进行的。 答 15: 我是这样认为的,大家看一看是否正确noday问题:想从boot调用application里的函数,可以实现吗?
从芯片的原理来看,两个bootloader和application两个部分还是编一编址的,只是下载编程(或自编程)机制按照熔丝位的设定进行,但在运行时两个部分应该是一样的,因此应该是可以从boot调用application里的函数。
以上仅仅只是我的想法,最终应该以实验结果为准。 答 16: 重新描述一下问题吧,前面说的比较乱,^_^ 最初直接通过#pragma abs_address <绝对地址> 指定,想把一个hex文件一次性分两部分烧到app和boot里面指定的地址。但是发现只有指定到app区域的写入成功,到boot区的没有写入。
从生成的hex文件来看,本来指定到0x1e000的程序被写到了0xe000处,不知为何?
( 注:ICCAVR编译器里面的memory size是以byte来计的,mage128的128kbyte flash rom即0x20000。这样选择boot区为8k byte时,即是0x1e000开始. ) 答 17: 把测试代码贴出来。> 从生成的hex文件来看,本来指定到0x1e000的程序被写到了0xe000处,不知为何?
怎么得到?能否把源程序贴出来。
>注:ICCAVR编译器里面的memory size是以byte来计的,mage128的128kbyte flash rom即0x20000。这样选择boot区为8k byte时,即是0x1e000开始. )
看不明白。
选择boot为4KWord,为8kB,应该从0x1000开始放中断向量的。0x1e000开始是什么意思? 答 18: 高64KFLASH是要通过寄存器RAMPZ设置的。 答 19: 0x1e000是boot区(4k word)的起始地址啊我的程序结构如下:
#pragma abs_address:0x8000 //指定到application区
... 程序段1
#pragma end_abs_address
#pragma abs_address:0x1e000 //指定到boot区
...程序段2
#pragma end_abs_address
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
【换取逻辑分析仪】自制底板并驱动ArduinoNanoRP2040ConnectLCD扩展板被打赏47分 | |
【分享评测,赢取加热台】RISC-V GCC 内嵌汇编使用被打赏38分 | |
【换取逻辑分析仪】-基于ADI单片机MAX78000的简易MP3音乐播放器被打赏48分 | |
我想要一部加热台+树莓派PICO驱动AHT10被打赏38分 | |
【换取逻辑分析仪】-硬件SPI驱动OLED屏幕被打赏36分 | |
换逻辑分析仪+上下拉与多路选择器被打赏29分 | |
Let'sdo第3期任务合集被打赏50分 | |
换逻辑分析仪+Verilog三态门被打赏27分 | |
换逻辑分析仪+Verilog多输出门被打赏24分 | |
【分享评测,赢取加热台】使用8051单片机驱动WS2812被打赏40分 |