打印

发现一个奇怪的现象,大家进来看看

[复制链接]
4867|36
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 天道酬勤dw 于 2012-8-25 23:24 编辑


今天在调试程序时发现FM1702SL能激活不能写卡,
经过一番查找发现问题所在,
HL_Write(TX_BUF,12);(已包括激活写卡)

//FM1702写卡时数组TX_BUF不能成功写入。
当我把数组换个名如TXBUF时,写卡就正常(注意此时写卡是正常的)。
经过认真分析发现FM1702Sl写一个块区数据时一次性要写十六个字节,而我的数组只定义了14个字节的数据。
然后我把TX_BUF数组改成16个字节,下载读卡正常。
但令我不解的是在我数组定义14个字节的时候用TX_BUF做数组名就不能正常读卡,只要把数组名换成其他的就行啦。例如我换成TXBUF就正常。
大家有没人知道为什么的呀,可能跟数据的存储有关。

相关帖子

沙发
天道酬勤dw|  楼主 | 2012-8-26 12:26 | 只看该作者
没人知道为什么吗

使用特权

评论回复
板凳
天道酬勤dw|  楼主 | 2012-8-26 21:38 | 只看该作者
:D

使用特权

评论回复
地板
天道酬勤dw|  楼主 | 2012-8-27 09:33 | 只看该作者
:'(

使用特权

评论回复
5
原野之狼| | 2012-8-27 09:40 | 只看该作者
把未改名编译后的bin与改名后编译的bin比较一下就知道了  改名后能行很有可能是问题还没有暴露出来

使用特权

评论回复
6
fordpj| | 2012-8-27 13:47 | 只看该作者
TX_BUF可能是特殊的字符或寄存器之类的

使用特权

评论回复
7
天道酬勤dw|  楼主 | 2012-8-27 15:59 | 只看该作者
6# fordpj
我找过调用的头文件,没有用TX_BUF做标志符的,KEIL C也没有TX_BUF这个关键词呀

使用特权

评论回复
8
天道酬勤dw|  楼主 | 2012-8-27 16:03 | 只看该作者
5# 原野之狼
最后编译出来应该不关数组名的事呀,编译出来只有地址没有数组名啦,应该跟标志名不是很大关系吧。难道KEIL软件分配地址时还跟所用标志符有关的吗

使用特权

评论回复
9
kumuhuakai| | 2012-8-27 17:17 | 只看该作者
我不了解FM1702SL,也不了解你的程序是怎么工作的,我猜会不会是你TX_BUF改为16字节后写入数据区的数据没有擦除,之后改回14字节的TXBUF运行,实际还是操作16字节TX_BUF时写入的数据

使用特权

评论回复
10
原野之浪| | 2012-8-27 19:12 | 只看该作者
8# 天道酬勤dw
大侠  你说的这种情况能复现么?就是能再次出现么?

我估计不能
你说的情况 我似乎也出现过

使用特权

评论回复
11
misra| | 2012-8-27 19:21 | 只看该作者
楼主要自信点   楼上说的对  你在试试  看看能不能复现

使用特权

评论回复
12
天道酬勤dw|  楼主 | 2012-8-27 19:28 | 只看该作者
本帖最后由 天道酬勤dw 于 2012-8-27 19:37 编辑

11# 原野之浪
只要我写的数组不是超过16字节数组名是TX_BUF时就会出现问题,数组名一改就没问题啦,因为FM1702写卡时每次操作一个块要写16个字节,我怀疑是我数组只写了14个字节,他写16字节时后面还有两个字节可能找不到地址啦,或者那个数组已经是最后一个地址啦。我是用指针操作的,指针到TX_BUFTX_BUF[13]时,指针找不到下个地址啦

使用特权

评论回复
13
天道酬勤dw|  楼主 | 2012-8-27 19:36 | 只看该作者
10# kumuhuakai
我是用STC89c52的单片机控制FM1702芯片读写射频卡S50;S50卡每次都是对块操作的每次16个字节的数据。而我的写入数组TX_BUF[14]只定义了14个字节,我换成TX_BUF[16]就正常啦,但是我写成TXBUF[14]也正常,改了个数组名也正常了。我不清楚数组名是不是跟地址的分配有关,我猜是TX_BUF[14]后面没有可用的地址啦,所以指针操作不到下一个地址

使用特权

评论回复
14
misra| | 2012-8-27 21:42 | 只看该作者
11# 原野之浪
只要我写的数组不是超过16字节数组名是TX_BUF时就会出现问题,数组名一改就没问题啦,因为FM1702写卡时每次操作一个块要写16个字节,我怀疑是我数组只写了14个字节,他写16字节时后面还有两个字节可能 ...
天道酬勤dw 发表于 2012-8-27 19:28

问你你的情况能不能复现 ? 你回答能还是不能?

使用特权

评论回复
15
misra| | 2012-8-27 21:43 | 只看该作者
如果能  你就发送邮箱给keil公司,告诉他们 他们的keil有问题

使用特权

评论回复
16
qq65411253| | 2012-8-27 21:47 | 只看该作者
可能你在哪个不知道的地方定义了一个同名的数组,而函数内部的数组是有优先权的。然后两个数组就冲突了,你以为读写的是这个,但实际上是另外一个。

使用特权

评论回复
17
qq65411253| | 2012-8-27 21:50 | 只看该作者
另外一种可能就是编译器的优化级别调得太高,我经常就出现一些莫名其妙的问题。

使用特权

评论回复
18
misra| | 2012-8-28 09:06 | 只看该作者
18# qq65411253
优化级别导致的问题 是因为对程序还是理解不够

使用特权

评论回复
19
天道酬勤dw|  楼主 | 2012-8-28 09:38 | 只看该作者
16# misra
能,不会KEIL的问题吧。难道keil在分配地址空间时还看标志符的吗

使用特权

评论回复
20
天道酬勤dw|  楼主 | 2012-8-28 15:25 | 只看该作者
17# qq65411253
找过全部文件包括头文件没有用TX_BUF做标志符的

使用特权

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

本版积分规则

0

主题

51

帖子

0

粉丝