S3F9488的位操作问题

[复制链接]
 楼主| aijun1980 发表于 2012-3-21 22:35 | 显示全部楼层 |阅读模式
发现我使用IAR编译器,对一个寄存器某一位置位,如    P4 |= 0X01; 会提示Internal Error:[CoreUtil/General]:
Illegal
State 错误,但是如果使用一个变unsigned char tmp;

tmp = p4;
tmp |= 0x01;
p4 = tmp;
这样就可以,不知道为什么,希望高手帮忙解答一下,谢谢!
ejack 发表于 2012-3-22 07:55 | 显示全部楼层
某些扩展51的P4口有操作时序限制,单周期写指令无法确保执行。
你看看汇编就知道了,对P4寄存器赋值时,前者生成的是单周期指令,后者生成的是双周期指令。
不过,我头一回知道编译器可以对这种情况进行报错……要是编译器早6年有这功能,俺那时也不必那么搜肠刮肚寻找bug了……
 楼主| aijun1980 发表于 2012-3-22 22:25 | 显示全部楼层
我测试了一下,好多寄存器都有这问题,一般这样的寄存器位操作,你是怎么做的,谢谢,用一个函数实现?
ejack 发表于 2012-3-23 07:42 | 显示全部楼层
数量少的话直接改。
数量多的话还是开函数吧。

好多寄存器都有这问题

一两个的话可能是bug,多的话就不像了。最好翻翻用户手册有没有关于这方面的详细说明。
yewuyi 发表于 2012-3-23 09:49 | 显示全部楼层
P4 |= 0X01


应该是0x01吧,IAR好像对这个大小写是有要求的。
 楼主| aijun1980 发表于 2012-3-24 10:04 | 显示全部楼层
5# fxmxh

你用位操作过吗?我总觉得是不是我用的IAR有问题,不可能全部不能用位操作啊,你是用什么版本的啊,我是从网上下载的IAR-C-FOR-SAM8-V310A**版本,
 楼主| aijun1980 发表于 2012-3-24 10:09 | 显示全部楼层
另外,我将所有优化选项都关了,还是有一样的错误,晕了
yewuyi 发表于 2012-3-24 10:37 | 显示全部楼层
要注意大小写,你自己看看你两种方式中的大小写区分了吗?

1、P4和p4是有区别的。
2、0X和0x是有区别的。
维修超人 发表于 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,或者前人的程序作参考,少走很多弯路
xxq1125 发表于 2016-8-19 22:25 | 显示全部楼层
维修超人 发表于 2012-6-14 17:26
早期用过一下S3F9488,
首先S3F9488不是51核,它是不支持位操作的,端口不能位操作,也不能想51那样定义bit ...

您好
找了很久的IAR Embedded WorkbenchTM for Samsung SAM8
但是没有找到合适的,您能发一个给我吗
维修超人 发表于 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

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

13

主题

20

帖子

0

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