注册 登录
查看: 479|回复: 20

RAM和ROM启动原理

[复制链接]
发表于 2014-10-19 20:19:50 | 显示全部楼层 |阅读模式
define symbol __ICFEDIT_intvec_start__=0x00000000这个是宏定义的用法吗
define exported symbol __ICFEDIT_intvec_start__=0x00000000加上了exported又是什么意思
回复

使用道具 举报

发表于 2014-10-19 20:22:47 | 显示全部楼层
这个是icf文件的语法,不是c语言语法,类似c语言的宏定义
回复 支持 反对

使用道具 举报

发表于 2014-10-19 20:24:00 | 显示全部楼层
exported 就相当于c语言的 extern ,表示外部可调用,就是C文件可加声明后就调用。

感觉山外的书介绍得挺详细的啊。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-10-19 20:25:05 | 显示全部楼层
仰逸致 发表于 2014-10-19 20:22
这个是icf文件的语法,不是c语言语法,类似c语言的宏定义

就是相当于把那个地址起个名字吗,,
回复 支持 反对

使用道具 举报

发表于 2014-10-19 20:26:00 | 显示全部楼层
lulinhan 发表于 2014-10-19 20:25
就是相当于把那个地址起个名字吗,,

是的,就相当于宏定义。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-10-19 20:26:53 | 显示全部楼层
仰逸致 发表于 2014-10-19 20:26
是的,就相当于宏定义。

恩恩,,多谢了,,,
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-10-19 21:16:30 | 显示全部楼层
仰逸致 发表于 2014-10-19 20:26
是的,就相当于宏定义。

把代码编进如RAM中会不会代码在运行中会改变,,,代码和数据在RAM中运行比较快,那能不能以后就这样放置代码和数据,,,

回复 支持 反对

使用道具 举报

发表于 2014-10-19 22:08:24 | 显示全部楼层
lulinhan 发表于 2014-10-19 21:16
把代码编进如RAM中会不会代码在运行中会改变,,,代码和数据在RAM中运行比较快,那能不能以后就这样放置 ...

RAM 比ROM快,不过RAM掉电丢失啊 !!
回复 支持 反对

使用道具 举报

发表于 2014-10-19 23:19:00 | 显示全部楼层
仰逸致 发表于 2014-10-19 22:08
RAM 比ROM快,不过RAM掉电丢失啊 !!

应该没人放在RAM中吧。
回复 支持 反对

使用道具 举报

发表于 2014-10-19 23:20:16 | 显示全部楼层
头上两只角 发表于 2014-10-19 23:19
应该没人放在RAM中吧。

可以把重要代码放到RAM执行(启动是从flash复制到RAM),例如flash驱动代码就是这样
回复 支持 反对

使用道具 举报

发表于 2014-10-22 12:35:02 | 显示全部楼层
可以看书第一章1.4.3后面那里!!!
来自PC客户端 来自PC客户端
回复 支持 反对

使用道具 举报

发表于 2014-10-22 12:46:33 | 显示全部楼层
ii童话Bū说话 发表于 2014-10-22 12:35
可以看书第一章1.4.3后面那里!!!

看来很强大,看得很熟悉。
来自安卓客户端来自安卓客户端
回复 支持 反对

使用道具 举报

发表于 2014-10-22 20:05:46 | 显示全部楼层
山外メ雲ジ 发表于 2014-10-22 12:46
看来很强大,看得很熟悉。

每天上课抱着书本都在啃!课都没听!
回复 支持 反对

使用道具 举报

发表于 2014-10-22 20:08:45 | 显示全部楼层
ii童话Bū说话 发表于 2014-10-22 20:05
每天上课抱着书本都在啃!课都没听!

这么给力啊,有没有阅读心得分享啊?
回复 支持 反对

使用道具 举报

发表于 2014-10-23 14:12:04 | 显示全部楼层
山外メ雲ジ 发表于 1413979725
这么给力啊,有没有阅读心得分享啊?
心得就是!山外哥太牛了!自己差的太远了!
来自PC客户端 来自PC客户端
回复 支持 反对

使用道具 举报

发表于 2014-10-24 13:17:54 | 显示全部楼层
ii童话Bū说话 发表于 2014-10-23 14:12
心得就是!山外哥太牛了!自己差的太远了!

这样的心得不行啊,我得收集各种心得,以便后续增加更多功能啊。
回复 支持 反对

使用道具 举报

发表于 2014-10-25 14:16:02 | 显示全部楼层
山外メ雲ジ 发表于 2014-10-24 13:17
这样的心得不行啊,我得收集各种心得,以便后续增加更多功能啊。

嗯嗯!补充来了!对新手来说!有些基础东西的用法还是不太明白!比如((PORT_MemMapPtr)0x40049000u)
还有就是((base) ->GPCLR) 这些东西在老师讲课的时候都没有提到过!有些地方不明白!
来自安卓客户端来自安卓客户端
回复 支持 反对

使用道具 举报

发表于 2014-10-25 14:21:44 | 显示全部楼层
ii童话Bū说话 发表于 2014-10-25 14:16
嗯嗯!补充来了!对新手来说!有些基础东西的用法还是不太明白!比如((PORT_MemMapPtr)0x40049000u)
还有 ...

下次直接发帖来问吧。

如果是这样的代码,是否看懂呢?
  1. int * p;
  2. p = (int *) 1;


换成结构体指针,还是一个道理:
  1. PORT_MemMapPtr  p = ((PORT_MemMapPtr)0x40049000u);
  2. p->GPCLR;


PORT_MemMapPtr 是指针类型来的,具体你看他的定义。

回复 支持 反对

使用道具 举报

发表于 2014-10-25 14:59:15 | 显示全部楼层
int * p;
p = (int *) 1;
这个是定义一个指针p;
p指向的内存地址为0x1;

PORT_MemMapPtr  p = ((PORT_MemMapPtr)0x40049000u);
p->GPCLR;
这个是定义一个结构体指针p;
指针p指向的内存地址为0x40049000

不明白的地方是
typedef struct PORT_MemMap
{
uint32_t PCR[32];
uint32_t GPCLR;
uint32_t GPCHR;
uint8_t  RESERVRD_0[24];
uint32_t ISFR;
uint8_t  RESERVRD_1[28];
uint32_t DFCR;
uint32_t DFWR;
}volatile *PORT_MemMapPtr;

*PORT_MemMapPtr  是 typedef 给结构体 PORT_MemMap 定的一个别名;
强制类型转换后,PORT_MemMapPtr是新定义的一个结构体指针类型 !
PORT_MemMapPtr类似于int*!!而不是*PORT_MemMapPtr!!对吧!?

p = ((PORT_MemMapPtr)0x40049000u);
结构体指针p指向内存地址0x40049000
p->GPCLR;的话指向内存地址0x40049080  对吧!
不明白的就是->这个运算符的用法!没用过!
还有 p -> GPCLR;和 (*p).GPCLR; 有什么区别!
结果运行的是一样的!但是具体的原理还是不明白!


原谅我吧!不知道为什么家里的台式电脑查代码查不进来!
附带一问!地址后面的u什么含义!?无字符型?








回复 支持 反对

使用道具 举报

发表于 2014-10-25 15:00:14 | 显示全部楼层
山外メ雲ジ 发表于 2014-10-25 14:21
下次直接发帖来问吧。

如果是这样的代码,是否看懂呢?

int * p;
p = (int *) 1;
这个是定义一个指针p;
p指向的内存地址为0x1;

PORT_MemMapPtr  p = ((PORT_MemMapPtr)0x40049000u);
p->GPCLR;
这个是定义一个结构体指针p;
指针p指向的内存地址为0x40049000

不明白的地方是
typedef struct PORT_MemMap
{
uint32_t PCR[32];
uint32_t GPCLR;
uint32_t GPCHR;
uint8_t  RESERVRD_0[24];
uint32_t ISFR;
uint8_t  RESERVRD_1[28];
uint32_t DFCR;
uint32_t DFWR;
}volatile *PORT_MemMapPtr;

*PORT_MemMapPtr  是 typedef 给结构体 PORT_MemMap 定的一个别名;
强制类型转换后,PORT_MemMapPtr是新定义的一个结构体指针类型 !
PORT_MemMapPtr类似于int*!!而不是*PORT_MemMapPtr!!对吧!?

p = ((PORT_MemMapPtr)0x40049000u);
结构体指针p指向内存地址0x40049000
p->GPCLR;的话指向内存地址0x40049080  对吧!
不明白的就是->这个运算符的用法!没用过!
还有 p -> GPCLR;和 (*p).GPCLR; 有什么区别!
结果运行的是一样的!但是具体的原理还是不明白!


原谅我吧!不知道为什么家里的台式电脑查代码查不进来!
附带一问!地址后面的u什么含义!?无字符型?

回复 支持 反对

使用道具 举报

发表于 2014-10-25 15:02:18 | 显示全部楼层
ii童话Bū说话 发表于 2014-10-25 15:00
int * p;
p = (int *) 1;
这个是定义一个指针p;

跟楼主贴内容不同啊,直接发给帖子吧。不然别人看帖子,同一个帖子不同内容。而且遇到相同问题时,我把帖子链接发给别人,别人也不方便找。
回复 支持 反对

使用道具 举报

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

本版积分规则

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