找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 987|回复: 4
打印 上一主题 下一主题
收起左侧

指针变量问题

[复制链接]
跳转到指定楼层
楼主
遇到一个指针变量问题,在keil C51下传入指针后不会改变原始值,然而移植到IAR for AVR 就会改变原始值,是因为内核不一样吗?
下图是C51的仿真测试,可以看出2次打印都是0xFFFF,原始值不变。



下图是AVR的仿真测试,可以看出第1次打印是0xFFFF,第二次打印就是0x0000了。



AVR下经过了HC595_COM1_WR_NByte(2,(uint8_t *)&MyTime.Public_10ms);函数后,原始的值就改变了,C51和AVR的HC595_COM1_WR_NByte函数是一样的,下图就是函数原型。


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:78835 发表于 2022-8-11 10:26 | 显示全部楼层
卧槽,没仔细看,C51的我改过了,用了一个临时变量,传递指针变量,所以C51的测试可以,打扰了。。。
void HC595_COM1_WR_NByte(uint8_t Len, uint8_t *GPIOValue)
{
    uint8_t i=0,Byte=0;
        while(Len--)
        {
                  Byte=*GPIOValue;
                HC595_COM1_STCP_RESET();
                for(i=0;i<8;i++)
                {               
                        HC595_COM1_SHCP_RESET();
                        if(Byte & 0x80)
                        {
                                HC595_COM1_DS_SET();
                        }
                        else
                        {
                                HC595_COM1_DS_RESET();
                        }
                        HC595_COM1_SHCP_SET();
                        Byte <<= 1;
                }       
                HC595_COM1_STCP_SET();
                GPIOValue++;
        }
}
回复

使用道具 举报

板凳
ID:78835 发表于 2022-8-11 10:26 | 显示全部楼层
这帖子可以结束了
回复

使用道具 举报

地板
ID:78835 发表于 2022-8-13 08:51 | 显示全部楼层
Hephaestus 发表于 2022-8-11 20:44
这个帖子并没有结束,最关键的问题楼主还是没有搞清楚。

在c语言里面,正常的做法是传值,如果是传指针 ...

之所以传入指针,是因为方便写入多个数据,595级联过去,一次要写入几个数据,传值进去不太方便,传指针进去,就是变量的地址,我在函数里面做了右移的操作,改变了原始的值,后面改成用一个临时变量来操作右移
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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