#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上的模拟学习的更多相关文章

  1. 在PC上测试移动端网站和模拟手机浏览器的5大方法

    在PC上测试移动端网站和模拟手机浏览器的5大方法 来源:互联网 作者:佚名 时间:03-19 10:14:54 [大 中 小]                最近公司要开发网站的移动版,让我准备准备知 ...

  2. 在PC上像普通winform程序调试WINCE程序

    在PC上像普通winform程序调试WINCE程序 步骤: 1. 在VS2008中到 工具→选项→设备工具→设备,选择对应的平台,另存为新的名称,如CEDesktopRun,关闭VS2008.(如果不 ...

  3. 在PC上运行安卓(Android)应用程序的4个方法

    我有一部荣耀3C,一般放在宿舍(我随身携带的是一部诺基亚E63,小巧.稳定.待机时间长),在宿舍我就会用它在微信上看公众号里的文章,最近要考驾照也在上面用驾考宝典.最近想在实验室用这两个软件,但又懒得 ...

  4. 在多台PC上进行ROS通讯-学习笔记

    首先,致谢易科(ExBot)和ROSWiki中文社区. 重要参考文献: Running ROS across multiple machines http://wiki.ros.org/ROS/Tut ...

  5. PC上安装多个操作系统

    目 录 第1章 绪论    1 1.1 目标    1 1.2 适宜的读者    1 第2章 制作启动U盘    2 2.1 初级安装    2 2.2 启动分析    3 2.3 高级安装    1 ...

  6. 微信小程序初体验(上)

    版权声明:本文由练小习原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/204 来源:腾云阁 https://www.qclo ...

  7. 在 WindowMobile 上的模拟LED 显示屏插件(转)

    源:在 WindowMobile 上的模拟LED 显示屏插件 我在给一个对话框上的控件查找翻看合适的图标时,无形中看到了一个LED显示屏的图标,这里所说的LED显示屏是指由很多LED灯密集排列组成的点 ...

  8. mac os x在PC上安装

    系统安装之前的准备工作及安装过程简介 前面我们已经提到,苹果电脑虽然已经采用了x86架构的Intel处理器,但其官方并不提供在非苹果电脑上安装Mac OS的支持.所以,要想在普通PC/笔记本电脑上安装 ...

  9. 让你在PC上调试Web App,UC浏览器发布开发者版

    目前,在手机上使用浏览器访问网页,无法便捷地进行网页语言调试.手机屏幕相对较小且操作不便,直接在手机上进行网页数据调试不太现实. 因此,UC使用技术将手机网页调试信息分离,实现一种能在大屏幕.高配置P ...

随机推荐

  1. ASP.NET Core Linux

    环境说明 CentOS / 7.1 (64bit) (Linux操作系统) 3MySQL5.7(网站应用数据库) .NET Core SDK 2.0.0(网站应用环境) Nginx(反向代理服务器) ...

  2. 【复习笔记】HTML基础

    编码 HTML LANG标注整体文档语言 常用编码:ASCII.GB2312.UTF-8 中文编码解决: 1.浏览器要用一个编码表去看你的文件<meta charset="utf-8& ...

  3. ptxas fatal : Unresolved extern function Error 255

    This question already has an answer here: External calls are not supported - CUDA 1 answer I am tryi ...

  4. 读Linear Algebra -- Gilbert Strang

    转眼间我的学士学位修读生涯已经快要到期了,重读线性代数,一是为了重新理解Algebra的的重要概念以祭奠大一刷过的计算题,二是为了将来的学术工作先打下一点点(薄弱的)基础.数学毫无疑问是指导着的科研方 ...

  5. Swing---WindowConstants

    Java桌面开发过程中,很多人都写过类似下面的代码. import javax.swing.JFrame; public class SimpleFrame { public static void ...

  6. HDFS读写策略

    数据的读取过程: 数据读取: 客户端调用FileSystem 实例的open 方法,获得这个文件对应的输入流InputStream. 通过RPC 远程调用NameNode ,获得NameNode 中此 ...

  7. UVALive 4670 Dominating Patterns (AC自动机)

    AC自动机的裸题.学了kmp和Trie以后不难看懂. 有一些变化,比如0的定义和f的指向,和建立失配边,以及多了后缀连接数组last.没有试过把失配边直接当成普通边(一开始还是先这样写吧). #inc ...

  8. Predicate Programming Guide

    https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/Predicates/AdditionalChap ...

  9. [torch] torch.contiguous

    torch.contiguous 作用 连续存储,因为view的操作要求的是连续的内容. 详细 考虑下面的操作,transpose操作只是改变了stride,而实际数组存储的内容并没有得到任何改变,即 ...

  10. 虚IP切换原理

    高可用性HA(High Availability)指的是通过尽量缩短因日常维护操作(计划)和突发的系统崩溃(非计划)所导致的停机时间,以提高系统和应用的可用性.HA系统是目前企业防止核心计算机系统因故 ...