硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1303|回复: 8
收起左侧

[MDK] MDK __attribute__指定数组在RAM中的地址,但是好像数组好像并没有存放在指定位置?

[复制链接]

1

主题

2

回帖

5

积分

新手上路

积分
5
发表于 2024-9-8 20:18:28 | 显示全部楼层 |阅读模式
MDK 5.26 ,ARM compiler :Use default compiler version5。



[C] 纯文本查看 复制代码
#define RAM_ADDR             0x20001000    
u16 plc_16BitBuf[PLC_16BIT_BUF_SIZE] __attribute__ ((at(RAM_ADDR)));

for(temp=0;temp<126;temp++)                     
  {                                                                 
     temp_address = 0x1800;
     plc_16BitBuf[temp_address+temp]=special_d[temp]; 
  }



先是定义了基地址0x20001000,然后指定plc_16BitBuf数组存放在RAM的基地址位置,初始化的时候给数组第0x1800后127个元素赋值 。

但是运行的时候,发现RAM的0x20002800地址的数据并不是我们想要的数据。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117530
QQ
发表于 2024-9-9 08:26:34 | 显示全部楼层
这个定义按说没问题的,看下manp文件实际地址是多少。

AC5,直接写数值试试:
u16 plc_16BitBuf[PLC_16BIT_BUF_SIZE]  __attribute__((at(0x20001000)));

AC6:
u16 plc_16BitBuf[PLC_16BIT_BUF_SIZE] __attribute__((section(".ARM.__at_0x20001000")));
回复

使用道具 举报

1

主题

9

回帖

12

积分

新手上路

积分
12
发表于 2024-9-9 08:32:23 | 显示全部楼层
应该不是0x20002800这个地址吧,我记得在u16数组的应该是0x20001000+0x1800*2
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117530
QQ
发表于 2024-9-9 08:35:16 | 显示全部楼层
tajiong 发表于 2024-9-9 08:32
应该不是0x20002800这个地址吧,我记得在u16数组的应该是0x20001000+0x1800*2



看的仔细
回复

使用道具 举报

1

主题

2

回帖

5

积分

新手上路

积分
5
 楼主| 发表于 2024-9-9 09:04:03 | 显示全部楼层
tajiong 发表于 2024-9-9 08:32
应该不是0x20002800这个地址吧,我记得在u16数组的应该是0x20001000+0x1800*2

好像是这个原因,我回去再调试一下,我在main函数的C文件里,直接用int *p = (int*)0x20005000;试验了一下,是可以直接将变量定义在指定地址的。上面这个数组是定义在其他C文件里,不知道有没有影响?
回复

使用道具 举报

3

主题

112

回帖

121

积分

初级会员

积分
121
发表于 2024-9-9 11:38:53 | 显示全部楼层
有一些buf需要分配到固定的RAM1或者RAM2,如果使用DMA传输时,就只能分配到RAM1。
回复

使用道具 举报

356

主题

2180

回帖

3253

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3253
发表于 2024-9-9 14:28:45 | 显示全部楼层
zyftank 发表于 2024-9-9 09:04
好像是这个原因,我回去再调试一下,我在main函数的C文件里,直接用int *p = (int*)0x20005000;试验了一 ...

这种指针强制赋值访问的方式不好。
如果代码后续更新,编译器可能把这块地址用了,也不会有什么警告,然后就程序就飞了。
还是要让编译器参与指定地址的ram的分配。
回复

使用道具 举报

0

主题

131

回帖

131

积分

初级会员

积分
131
发表于 2024-9-22 01:06:54 | 显示全部楼层
不能用宏要直接写地扯
回复

使用道具 举报

1

主题

2

回帖

5

积分

新手上路

积分
5
 楼主| 发表于 2024-10-5 13:17:18 | 显示全部楼层
Edmund1964 发表于 2024-9-22 01:06
不能用宏要直接写地扯

那应该是你还没掌握规律,用起来还挺好用的,没那么玄乎。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-13 03:44 , Processed in 0.042782 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表