野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 18088|回复: 5

创建了指针,并未分配内存的问题

[复制链接]
发表于 2019-3-7 10:23:30 | 显示全部楼层 |阅读模式
#include<stdio.h>
#include<stdlib.h>
typedef unsigned int uint32_t;
typedef unsigned short int uint16_t;
typedef struct
{
        uint32_t CRL;        uint32_t CRH;        uint32_t IDR;        uint32_t ODR;
        uint32_t BSRR;        uint32_t BRR;        uint32_t LCKR;
}GPIO_TypeDef;

#define GPIOB_BASE ( (GPIO_TypeDef*)0x40010800 )        //定义GPIOB_BASE的内存地址为 0x 4001 0800

void main(void)
{
        GPIO_TypeDef *GPIOx;
        GPIOx=GPIOB_BASE;
        GPIOx->IDR=0xFFFF;           //这个对GPIOx->IDR赋值0xFFFF在语法上是不行的吧?
}
////////////////  虽然前面已经创建了指针GPIOx,但系统并未给该内存所指向的空间所要储存的数值 分配内存吧? 这是会报错的吧?为什么客服跟我说在MDK上可以运行?
我在visual studio上是要报错的!
求大神赐教

回复

使用道具 举报

发表于 2019-3-7 11:06:27 | 显示全部楼层
mdk编译后程序是下载到stm32芯片的,stm32芯片里这些是寄存器地址,相当于就是访问寄存器了,
你在visual studio上跑,是在intel或amd芯片上跑的,内存映射不一样,自然不行了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-3-7 13:48:25 | 显示全部楼层
flyleaf 发表于 2019-3-7 11:06
mdk编译后程序是下载到stm32芯片的,stm32芯片里这些是寄存器地址,相当于就是访问寄存器了,
你在visual  ...

是不是可以认为:在MDK运行时,系统自动给数值分配好了内存,或者MDK在哪个地方自动给它分配了数值所需的内存,而在vs运行时却不会分配内存?
回复 支持 反对

使用道具 举报

发表于 2019-3-7 14:04:12 | 显示全部楼层
watermelon04 发表于 2019-3-7 13:48
是不是可以认为:在MDK运行时,系统自动给数值分配好了内存,或者MDK在哪个地方自动给它分配了数值所需的 ...

是stm32芯片定义了这些内存地址就是寄存器,在pc上没有这些寄存器
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-3-7 16:38:58 | 显示全部楼层
flyleaf 发表于 2019-3-7 14:04
是stm32芯片定义了这些内存地址就是寄存器,在pc上没有这些寄存器

哦哦哦,谢谢。初学单片机,问些低级问题,见笑了
回复 支持 反对

使用道具 举报

发表于 2019-3-7 17:50:22 | 显示全部楼层
watermelon04 发表于 2019-3-7 16:38
哦哦哦,谢谢。初学单片机,问些低级问题,见笑了

不熟悉是这样的,都有个过程
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2025-12-6 05:00 , Processed in 0.045134 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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