请教一个keilc的问题,有关code数组定位的

[复制链接]
4818|8
 楼主| 今晚打老虎 发表于 2008-7-10 21:52 | 显示全部楼层 |阅读模式
想把自己定义的多个数组连续的放在mcu rom空间中。
例如:
uchar code array1[] = {...};
uchar code array2[] = {...};
uchar code array3[] = {...};
uchar code array4[] = {...};
uchar code array5[] = {...};
uchar code array6[] = {...};
编译的时候,array2在rom空间中并不是接在array1的后面,请问有什么方法能实现我的要求?
还有一个问题,就是在程序中有下列的一段
spi_send_data(0);
spi_send_data(0);
spi_send_data(0);
spi_send_data(0);
编译链接后只有一条spi_send_data(0);的语句了,另外的3条都被优化了,可以在每条语句间加_nop_();可是觉得这样不好,不知道有没有更好的方法?谢谢!
huangqi412 发表于 2008-7-11 07:48 | 显示全部楼层

把几个数组拼成一个结构体估计可以作到要求.

ayb_ice 发表于 2008-7-11 08:22 | 显示全部楼层

用结构体

还可以直接设置连接选项
lenglx 发表于 2008-7-11 12:41 | 显示全部楼层

...

1.
    a)在源代码中使用ORDER指示符
    #pragma SAVE
    #pragma ORDER
        uchar code array1[] = {...};
        uchar code array2[] = {...};
        //...
    #pragam RESTORE
    
    b) 在链接命令使用 NOSORTSIZE 指示符

2.
     a) 将优化级别降低
     #pragma SAVE
     #pragma ot(0, speed)
     spi_send_data(0);
     spi_send_data(0);
     spi_send_data(0);
     #pragam RESTORE
     
     b)在你的spi_send_data()函数中使用volatile变量
     
acmilann 发表于 2008-7-11 22:52 | 显示全部楼层

code 数组的话还可以直接定位到某个特定地址

 楼主| 今晚打老虎 发表于 2008-7-13 19:50 | 显示全部楼层

感谢楼上几位的回答

2,3楼的那么早就起来答疑了,谢谢啊!
4楼的哥们描述的很详细,感谢!
5楼的锦上添花啊,多谢多谢!
keaiduole 发表于 2008-8-3 21:52 | 显示全部楼层

恩恩,学习了。。。。

mohanwei 发表于 2008-8-4 11:01 | 显示全部楼层

_at_ 加 sizeof()应该可以

xwj 发表于 2008-8-4 11:10 | 显示全部楼层

数组不等长的话当然是做链表啦

去看我以前发的拼音输入法,学学思路...



不过呢...C下面为什么非要想着绝对定位呢?
要绝对定位那就综合参考4、5、8楼的贴吧:-)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

96

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部