打印

S3F9488的位操作问题

[复制链接]
3169|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
aijun1980|  楼主 | 2012-3-21 22:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
ejack| | 2012-3-22 07:55 | 只看该作者
某些扩展51的P4口有操作时序限制,单周期写指令无法确保执行。
你看看汇编就知道了,对P4寄存器赋值时,前者生成的是单周期指令,后者生成的是双周期指令。
不过,我头一回知道编译器可以对这种情况进行报错……要是编译器早6年有这功能,俺那时也不必那么搜肠刮肚寻找bug了……

使用特权

评论回复
板凳
aijun1980|  楼主 | 2012-3-22 22:25 | 只看该作者
我测试了一下,好多寄存器都有这问题,一般这样的寄存器位操作,你是怎么做的,谢谢,用一个函数实现?

使用特权

评论回复
地板
ejack| | 2012-3-23 07:42 | 只看该作者
数量少的话直接改。
数量多的话还是开函数吧。

好多寄存器都有这问题

一两个的话可能是bug,多的话就不像了。最好翻翻用户手册有没有关于这方面的详细说明。

使用特权

评论回复
5
yewuyi| | 2012-3-23 09:49 | 只看该作者
P4 |= 0X01


应该是0x01吧,IAR好像对这个大小写是有要求的。

使用特权

评论回复
6
aijun1980|  楼主 | 2012-3-24 10:04 | 只看该作者
5# fxmxh

你用位操作过吗?我总觉得是不是我用的IAR有问题,不可能全部不能用位操作啊,你是用什么版本的啊,我是从网上下载的IAR-C-FOR-SAM8-V310A**版本,

使用特权

评论回复
7
aijun1980|  楼主 | 2012-3-24 10:09 | 只看该作者
另外,我将所有优化选项都关了,还是有一样的错误,晕了

使用特权

评论回复
8
yewuyi| | 2012-3-24 10:37 | 只看该作者
要注意大小写,你自己看看你两种方式中的大小写区分了吗?

1、P4和p4是有区别的。
2、0X和0x是有区别的。

使用特权

评论回复
9
维修超人| | 2012-6-14 17:26 | 只看该作者
早期用过一下S3F9488,
首先S3F9488不是51核,它是不支持位操作的,端口不能位操作,也不能想51那样定义bit(位)变量。因为他的汇编压根就没有位操作指令。
以LZ的例子为例: P41=1;//这种操作才是位操作,S3F9488是不支持的,它的头文件里没有P41的定义
                  P4 |= 0X01; //S3F9488只支持这种单独IO的操作。
LZ的这句操作是没问题的,我直接复制到我的项目中编译,正常通过,没有任何警告。
P4的“P”肯定要大写。
0X的“X”大小写都可以,已经试过。
我的IAR版本是IAR Embedded WorkbenchTM for Samsung SAM8 V2.21A。
LZ是从零开始写S3F9488吗?建议你找个Demo,或者前人的程序作参考,少走很多弯路

使用特权

评论回复
10
xxq1125| | 2016-8-19 22:25 | 只看该作者
维修超人 发表于 2012-6-14 17:26
早期用过一下S3F9488,
首先S3F9488不是51核,它是不支持位操作的,端口不能位操作,也不能想51那样定义bit ...

您好
找了很久的IAR Embedded WorkbenchTM for Samsung SAM8
但是没有找到合适的,您能发一个给我吗

使用特权

评论回复
11
维修超人| | 2017-2-21 15:41 | 只看该作者
xxq1125 发表于 2016-8-19 22:25
您好
找了很久的IAR Embedded WorkbenchTM for Samsung SAM8
但是没有找到合适的,您能发一个给我吗 ...

无意中翻出这个回帖,天了噜,现在都什么年代了?16年了你还在用三星的8位单片机?9488都停产好几年了吧。不要找什么IAR SAM8啦,现在都是用现代的单片机直接取代三星了。你查一下现代单片机吧,管脚兼容,希望还能帮到你。

使用特权

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

本版积分规则

13

主题

20

帖子

0

粉丝