KEIL C51结构体问题求助
GPIO_REG *GPIOA; // 这条语句你只是定义了一个结构体指针,没有定义一个结构体变量。
就是说GPIOA没有指向一个有效的结构体变量,是个野指针。并且Keil把GPIOA初始化成了0x00,这是寄存器组,程序运行时,寄存器里的值是会变的。
keil c51的简介
支持8051微控制器体系结构的Keil开发工具,适合每个阶段的开发人员,不管是专业的应用工程师,还是刚学习嵌入式软件开发的学生。 Keil C51目前由ARM国内授权代理商提供技术支持和销售等相关服务。 产业标准的Keil C编译器、宏汇编器、调试器、实时内核、单板计算机和仿真器,支持所有的251系列微控制器,帮助你如期完成项目进度。
以下图表显示Keil的开发工具以及它们相互之间的接口。
KEIL C51开发工具旨在解决嵌入式软件开发商面临的复杂问题。
当你开始一个新项目,只需简单的从设备数据库选择使用的设备,uVision IDE将设置好所有的编译器、汇编器、链接器和存储器选项。
包含大量的例程,帮助你着手使用最流行的嵌入式8051设备。
Keil μVision调试器准确地模拟8051设备的片上外围设备(IC、CAN、UART、SPI、中断、I/O端口、A/D转换器、D/A转换器和PWM模块)。模拟帮助你了解硬件配置,避免在安装问题上浪费时间。 此外,使用模拟器你可以在没有目标设备的情况下编写和测试应用程序。
当你准备在目标硬件上测试软件应用时,可以使用MON51、MON390、NONADI、或者FlashMON51目标监视器、ISD51 In-System调试器、ULINK USB-JTAG适配器在目标系统上下载并测试程序代码。
在keil C51中使用结构体的问题
楼主没有搞清楚 51的 结构.
楼上说的虽然大多是废话,,对你的项目可以没多少帮助
但是至少有一点是对的..设置成xdata可以解决你的问题.
虽然不是什么好办法.
51的 ram 分外三种.
内部直接寻址你的128byte 内部间接的128byte
还有就是外部 ram
你的51单片机有512byte
那么肯定是 内部 直接 间接各128
外加外部256字节
你把那些大一点的数据全部改成 xdata 声明就可以了.
当然如果你会控制ram大小的话..用idata 声明效率更好一点
例如 unsigned char yy;
写个成 unsigned char xdata yy;
(你看你自己的编译结果显示 data=137, xdata=0, code=4856
就应该猜测一下 xdata 干吗用的了
最后 建议楼主. 最好不用在keil c51里面使用printf函数(浪费啊)
回去.仔细看一遍51的结构..然后看看keil c51的区别于ansi c的东西
会对你有帮助
如果对您有帮助,请记得采纳为满意答案,谢谢!祝您生活愉快!