GPIO程序在PC上的模拟学习
#include <stdio.h>
#include <malloc.h>
#include <memory.h> typedef struct gpio
{
int pr;
int pl;
}* GPIO_MemMapPtr; //注释为了避免内存出错
//GPIO_MemMapPtr GPIO_Ptr; //定义一个结构体指针变量,GCC会分配一个内存的。 #define PTA_BASE_PTR ((GPIO_MemMapPtr)0x0028ff10)
#define PTD_BASE_PTR ((struct gpio*)0x0028ff50) #define GPIO_PR_REG(base) ((base)->pr)
#define GPIO_PL_REG(base) ((base)->pl) typedef struct
{
int io_da;
int io_db;
}GPIO_TypeDef;
#define GPIOB ((GPIO_TypeDef*)(0x0028ff30)) int main(int argc, char* argv[])
{
int i = ;
//0x0028ff10开始的8各字节内存的内容清零
memset((int *)(0x0028ff10), , ); GPIO_PR_REG(PTA_BASE_PTR) = 0x02;
GPIO_PL_REG(PTA_BASE_PTR) = 0x02; GPIO_PR_REG(PTD_BASE_PTR) = 0x05;
GPIO_PL_REG(PTD_BASE_PTR) = 0x06; //注释为了避免内存出错
//GPIO_Ptr->pl = 0x03;
//GPIO_Ptr->pr = 0x04; //下面的语句是错误的,因为GPIO_MemMapPtr GPIO_Ptr;已经被GCC分配了一个内存,
//因此该宏定义#define PTC_BASE_PTR ((GPIO_Ptr)0x0028ff20)是错误的,不成立的。
//GPIO_PR_REG(PTC_BASE_PTR) = 0x03;
//GPIO_PL_REG(PTC_BASE_PTR) = 0x04; GPIOB->io_da = 0x01;
GPIOB->io_db = 0x01; printf("data in ram 0x0028ff10 = %d\n", (int)(*(int *)(0x0028ff10)));
printf("data in ram 0x0028ff30 = %d\n", (int)(*(int *)(0x0028ff30)));
printf("data in ram 0x0028ff14 = %d\n", (int)(*(int *)(0x0028ff14)));
printf("data in ram 0x0028ff34 = %d\n", (int)(*(int *)(0x0028ff34)));
printf("data in ram 0x0028ff50 = %d\n", (int)(*(int *)(0x0028ff50)));
printf("data in ram 0x0028ff54 = %d\n", (int)(*(int *)(0x0028ff54))); return ;
}
运行结果:
data in ram 0x0028ff10 = 2
data in ram 0x0028ff30 = 1
data in ram 0x0028ff14 = 2
data in ram 0x0028ff34 = 1
data in ram 0x0028ff50 = 5
data in ram 0x0028ff54 = 6
gdb的内存查看为:

预编译后gcc -E typedef_st.c -o typedef_st.i:
typedef struct gpio
{
int pr;
int pl;
}* GPIO_MemMapPtr; GPIO_MemMapPtr GPIO_Ptr;
# "typedef_st.c"
typedef struct
{
int io_da;
int io_db;
}GPIO_TypeDef; int main(int argc, char* argv[])
{
int i = ; memset((int *)(0x0028ff10), , ); ((((GPIO_MemMapPtr)0x0028ff10))->pr) = 0x02;
((((GPIO_MemMapPtr)0x0028ff10))->pl) = 0x02; ((((struct gpio*)0x0028ff20))->pr) = 0x05;
((((struct gpio*)0x0028ff20))->pl) = 0x06; GPIO_Ptr->pl = 0x03;
GPIO_Ptr->pr = 0x04; ((GPIO_TypeDef*)(0x0028ff30))->io_da = 0x01;
((GPIO_TypeDef*)(0x0028ff30))->io_db = 0x01; printf("data in ram 0x0028ff10 = %d\n", (int)(*(int *)(0x0028ff10)));
printf("data in ram 0x0028ff30 = %d\n", (int)(*(int *)(0x0028ff30)));
printf("data in ram 0x0028ff14 = %d\n", (int)(*(int *)(0x0028ff14)));
printf("data in ram 0x0028ff34 = %d\n", (int)(*(int *)(0x0028ff34))); return ;
}
GPIO程序在PC上的模拟学习的更多相关文章
- 在PC上测试移动端网站和模拟手机浏览器的5大方法
在PC上测试移动端网站和模拟手机浏览器的5大方法 来源:互联网 作者:佚名 时间:03-19 10:14:54 [大 中 小] 最近公司要开发网站的移动版,让我准备准备知 ...
- 在PC上像普通winform程序调试WINCE程序
在PC上像普通winform程序调试WINCE程序 步骤: 1. 在VS2008中到 工具→选项→设备工具→设备,选择对应的平台,另存为新的名称,如CEDesktopRun,关闭VS2008.(如果不 ...
- 在PC上运行安卓(Android)应用程序的4个方法
我有一部荣耀3C,一般放在宿舍(我随身携带的是一部诺基亚E63,小巧.稳定.待机时间长),在宿舍我就会用它在微信上看公众号里的文章,最近要考驾照也在上面用驾考宝典.最近想在实验室用这两个软件,但又懒得 ...
- 在多台PC上进行ROS通讯-学习笔记
首先,致谢易科(ExBot)和ROSWiki中文社区. 重要参考文献: Running ROS across multiple machines http://wiki.ros.org/ROS/Tut ...
- PC上安装多个操作系统
目 录 第1章 绪论 1 1.1 目标 1 1.2 适宜的读者 1 第2章 制作启动U盘 2 2.1 初级安装 2 2.2 启动分析 3 2.3 高级安装 1 ...
- 微信小程序初体验(上)
版权声明:本文由练小习原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/204 来源:腾云阁 https://www.qclo ...
- 在 WindowMobile 上的模拟LED 显示屏插件(转)
源:在 WindowMobile 上的模拟LED 显示屏插件 我在给一个对话框上的控件查找翻看合适的图标时,无形中看到了一个LED显示屏的图标,这里所说的LED显示屏是指由很多LED灯密集排列组成的点 ...
- mac os x在PC上安装
系统安装之前的准备工作及安装过程简介 前面我们已经提到,苹果电脑虽然已经采用了x86架构的Intel处理器,但其官方并不提供在非苹果电脑上安装Mac OS的支持.所以,要想在普通PC/笔记本电脑上安装 ...
- 让你在PC上调试Web App,UC浏览器发布开发者版
目前,在手机上使用浏览器访问网页,无法便捷地进行网页语言调试.手机屏幕相对较小且操作不便,直接在手机上进行网页数据调试不太现实. 因此,UC使用技术将手机网页调试信息分离,实现一种能在大屏幕.高配置P ...
随机推荐
- OAuthLogin2.0
开源第三方登录组件OAuthLogin2.0 支持QQ,阿里巴巴,淘宝,京东,蘑菇街,有赞等平台 Nuget地址:https://www.nuget.org/packages/OAuthLogin ...
- STM32之ADC(内部基准电压,参考电压)
转 STM32内部参照电压VREFIN的使用 https://blog.csdn.net/uncle_guo/article/details/50625660 每个STM32芯片都有一个内部的参照电压 ...
- (转)Linux日志管理+ last lastlog lastb
Linux日志管理+ last lastlog lastb 原文:http://blog.csdn.net/xin_y/article/details/53440707 日志管理 日志通常存放在 /v ...
- 重置 linux系统后要配置的基本组件操作
1.安装jdk https://www.cnblogs.com/shihaiming/p/5809553.html 2.安装mysql 3.安装tomcat
- windows下使用MYSQL的mysqldumpslow进行慢日志分析
1.首先安装好perl环境. 2.在dos环境中,切换到perl目录中,例如我的目录是 dos 命令 cd c:\Perl\bin 3.在此目录输入perl mysqldumpslow的路径\mysq ...
- NIO基础之Buffer
java.io 核心概念是流,即面向流的编程,在java中一个流只能是输入流或者输出流,不能同时具有两个概念. java.nio核心是 selector.Channel.Buffer ,是面向缓冲区( ...
- Azure 虚拟机安全加固整理
这篇文档不是原创,只是基于Azure官网上的Doc进行了相关链接的整理,从简单层面的安全设置,到更高层面的安全架构考量,以及Azure安全的白皮书及最佳实践,送给需要的你们,定有一款适合你! 做好数据 ...
- 枚举转List
将枚举值转为list (name,value) 的形式 /// <summary> /// 获取口味 /// </summary> /// <returns>< ...
- 本号讯 | 永不消失的协作“空间站”开课;微软推出微软云Azure文档网站
8月29日,针对企业常面临的“协同办公”困难,开展以“还有这种操作?永不消失的协作'空间站'”为主题的协同办公培训课. 课程内容包含:在Office 365环境中,如何利用Teams与Groups等功 ...
- Spring.Net 能为我们做点什么
本文内容 概述 背景 模块 使用场景 入门应用 Spring.NET 相关项目 本文正式开始前,我以目前所能想到的.此时此刻能想到的,先简单说下,为什么会有像 Spring.Net 这样的东西.首先, ...