你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

芯片从0地址开始跑,是不是随便写个函数在0地址就可以跑?

[复制链接]
beary 提问时间:2016-5-31 12:34 /
大家好,我有个问题,如果可以的话想请教一下

现在有一款freescale的芯片,FLASH从0地址开始,我想测试一下,比如写一个函数叫void led(void)
{
  /*比如说这是点亮灯的逻辑*/
  0x12345678=1;
  while(1);
}




这样编译了以后,下载到板子0地址可以点亮的灯吗??




然后是通过什么方式编译,然后下载到板子里呢?
收藏 评论15 发布时间:2016-5-31 12:34

举报

15个回答
moyanming2013 回答时间:2016-6-1 11:28:00
haohao663 发表于 2016-6-1 09:36
STM32F1入门福利贴:基于HAL库/CubeMX软件的软硬件设计手册...
https://www.stmcu.org.cn/module/forum/forum.p ...

只要内核一样,那么启动部分就差不多少。
我看了@haohao663的手册,写的很详细,学习了。
我也写过一个关于启动代码的帖子,摘录部分解楼主的疑惑:
“MCU上电并从flash启动后,首先从向量表中取得第一个成员:栈顶指针,并赋值给MSP寄存器;然后再取得向量表中的第2个成员Reset_Handler复位异常,并赋值给PC寄存器,这样MCU根据PC寄存器的内容就开始了程序的执行。
如果你的程序只用汇编代码编写程序,那么Reset_Handler处就是你编程开始的地方。”
我解释下,楼主第一条语句指定一个栈顶指针或者干脆直接写0x00或者任意(假设反正你又不用栈操作),第2条令写flash的起始地址,然后在该地址处存放程序就行了(这个麻烦点,你需要写一个汇编代码,来指出你的程序),这就是最简单的程序。当然都得用汇编写。最终发现你需要一个“启动文件”,但启动文件也可以简化到最小,那就是只有栈的定义、栈顶指针、复位向量和复位函数中直接开始操作LED灯的程序代码。如果用C语言特性,就复杂了,还是得要一个完整的启动文件。完整的启动如下图简单所示:
3.jpg
具体参考我的帖子:
http://jingyan.eeboard.com/article/version_preview/2119
mark0668 回答时间:2016-5-31 12:41:40
理论是这样吧,但你芯片还要初始化等等,
stary666 回答时间:2016-5-31 12:47:09
是这样的,
atmel.png
nxp.png
st.png
今日头条 回答时间:2016-5-31 15:47:58
应该吧~~
cxd0812 回答时间:2016-5-31 17:24:41
是这么回事,但是你这么写是肯定不行的,芯片大多数都不是从0地址跑的,一般从复位中断里出来,再跳一下,跳到你的程序代码上,再一个你写一个叫led的函数编译器也不给你过啊,得有main才行
Inc_brza 回答时间:2016-5-31 22:24:12
这样编译能通过我直播吃电脑,常量赋值给常量是几个意思呢?
beary 回答时间:2016-6-1 09:16:58
Inc_brza 发表于 2016-5-31 22:24
这样编译能通过我直播吃电脑,常量赋值给常量是几个意思呢?

打比方。
beary 回答时间:2016-6-1 09:18:19
cxd0812 发表于 2016-5-31 17:24
是这么回事,但是你这么写是肯定不行的,芯片大多数都不是从0地址跑的,一般从复位中断里出来,再跳一下, ...

嗯 我就是想问这个,他一开始是做向量表,向量表里有一个复位回调,回调函数跳到main,如果我那个复位的回调直接用这个东西替代,不知道行不行,现在下载进去了没反应- -
haohao663 回答时间:2016-6-1 09:36:09
STM32F1入门福利贴:基于HAL库/CubeMX软件的软硬件设计手册...
https://www.stmcu.org.cn/module/ ... &fromuid=331315
(出处: 意法半导体STM32/STM8技术社区)
我们写的文档,里边有重点介绍微控制器的启动过程,只不过是stm32的,不知道freescale的也是不是一样的启动过程,实际上如果是cortex-m内核的话就都是一样的
moyanming2013 回答时间:2016-6-1 11:15:51
Inc_brza 发表于 2016-5-31 22:24
这样编译能通过我直播吃电脑,常量赋值给常量是几个意思呢?

,我们看不到直播吃电脑了
对于存储器访问只能使用间接访问,直接写地址肯定不行。
beary 回答时间:2016-6-1 11:30:39
haohao663 发表于 2016-6-1 09:36
STM32F1入门福利贴:基于HAL库/CubeMX软件的软硬件设计手册...
https://www.stmcu.org.cn/module/forum/forum.p ...

感谢感谢!!
cxd0812 回答时间:2016-6-2 10:20:46
beary 发表于 2016-6-1 09:18
嗯 我就是想问这个,他一开始是做向量表,向量表里有一个复位回调,回调函数跳到main,如果我那个复位的 ...

你这样做单片机没啥意见,应该能行,但编译器未必能给你通过,说不定编译器理解不了,给编译出来不是你想要的
Inc_brza 回答时间:2016-6-2 11:56:51
moyanming2013 发表于 2016-6-1 11:15
,我们看不到直播吃电脑了
对于存储器访问只能使用间接访问,直接写地址肯定不行。
...

不知道你想表达什么,我只知道这个代码能编译通过才有鬼,c语言都不及格!
yfy123 回答时间:2016-6-3 10:39:08
静静看着
12下一页

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版