打印

用一段汇编向一个固定地址写入一串字符?

[复制链接]
4357|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
y607|  楼主 | 2011-12-26 10:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
现在要用汇编像一个固定地址写入一串字符,例如固定地址为0x00001000,写入一串字符"12345678",用汇编如何编写,C语言不行的。谢谢了
沙发
mcuisp| | 2011-12-26 12:20 | 只看该作者
本帖最后由 mcuisp 于 2011-12-26 12:37 编辑

C语言可以的。
我正要发这个应用笔记呢、、、
虽然是stm8的,但是IAR里STM32的做法也差不多

使用特权

评论回复
板凳
y607|  楼主 | 2011-12-26 12:40 | 只看该作者
我知道C可以的,但是这段代码必须要用汇编来写。放在启动文件里面

使用特权

评论回复
地板
mcuisp| | 2011-12-26 12:53 | 只看该作者
汇编正规的做法也差不多,要在icf文件里定义段,然后去启动文件里引用段,再定义数组。
你可参考vector的定义来弄。

要注意0x00001000在stm32里是未明确定义的地址段。随启动条件不同,有不同意义。

使用特权

评论回复
5
y607|  楼主 | 2011-12-26 14:05 | 只看该作者
地址只是举个例子,确定的地址在0x0800000后面的某个地址

使用特权

评论回复
6
y607|  楼主 | 2011-12-26 14:18 | 只看该作者
有没有高手知道,我现在只需一段汇编代码,怎样向固定地址写入字符,汇编学的不是很好。

使用特权

评论回复
7
lxyppc| | 2011-12-27 09:06 | 只看该作者
一般汇编器都有这个功能,要看你所用的汇编器的说明书,里面会有詳細说明的

使用特权

评论回复
8
wangjun403| | 2011-12-27 11:11 | 只看该作者
DS不是好像有这个功能的吗?

使用特权

评论回复
9
y607|  楼主 | 2011-12-27 11:24 | 只看该作者
我需要在STM32的flash中的0x08001000处写入“12345678”,和在0x0802fff0处写入“87654321”烧入程序后这两处的地址的数据不会改变,用C不能搞定,从hex中看后面地址的代码有问题,所有现在只能从启动文件中添加汇编来写数据,相当于替代C中的一段宏定义。  
#define     shuju     (*((volatile unsigned long *)0x08000010))
shuu  = "12345678";
怎么用汇编来替代,现在觉得只能加到启动文件中,或者有什么好的方法,能解决这个问题。

使用特权

评论回复
10
y607|  楼主 | 2011-12-27 22:18 | 只看该作者
么人支持啊

使用特权

评论回复
11
静默| | 2011-12-28 09:22 | 只看该作者
1楼: "C语言不行的" ---- 我以为你必须用汇编写.
9楼: "用C不能搞定" ---- 原来是用C搞不定这个定义.

这就结了,
KEIL的代码(IAR俺不会, 不过一样可以处理):
const char gstrTest1[9] __attribute__((section(".ARM.__at_0x08001000"))) = {'1', '2', '3', '4', '5', '6', '7', '8', 0 };
const char gstrTest2[9] __attribute__((section(".ARM.__at_0x0802fff0"))) = {'8', '7', '6', '5', '4', '3', '2', '1', 0 };

HEX:
:101000003132333435363738000000002DE9FF4FD8 // 0x08001000

:0CFFF00038373635343332310000000061                 // 0x0802fff0

使用特权

评论回复
12
y607|  楼主 | 2011-12-28 10:33 | 只看该作者
楼上的谢谢了,这段代码我有,我想问的就是这段能否用汇编代替,用C不行的,Hex文件会出问题,用C不能搞定,Hex文件增加了很多无效空间,超出了固定的代码区。

使用特权

评论回复
13
静默| | 2011-12-28 13:41 | 只看该作者
本帖最后由 静默 于 2012-5-19 15:58 编辑

有这样的事, 可以把示例工程发给我, 我生成HEX文件.
哪会多出很多空间. 我的工程生成的HEX文件尾后几行.
:101D80000607080900A24A04000000000000000045
:101D9000010203040607080900000000000000001B
:020000040802F0
:0CFFF00038373635343332310000000061
:04000005080000ED02
:00000001FF

使用特权

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

本版积分规则

0

主题

13

帖子

1

粉丝