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

2019-07-14 16:29发布

大家好,我有个问题,如果可以的话想请教一下

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




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




然后是通过什么方式编译,然后下载到板子里呢?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
15条回答
7762642422d
2019-07-15 14:29
jiangwenwen 发表于 2018-10-30 18:34
STM32F1入门福利贴:基于HAL库/CubeMX软件的软硬件设计手册...
http://www.stmcu.org/module/foru ... &fromuid=331315
(出处: 意法半导体STM32/STM8技术社区)

只要内核一样,那么启动部分就差不多少。
我看了@haohao663的手册,写的很详细,学习了。
我也写过一个关于启动代码的帖子,摘录部分解楼主的疑惑:
“MCU上电并从flash启动后,首先从向量表中取得第一个成员:栈顶指针,并赋值给MSP寄存器;然后再取得向量表中的第2个成员Reset_Handler复位异常,并赋值给PC寄存器,这样MCU根据PC寄存器的内容就开始了程序的执行。
如果你的程序只用汇编代码编写程序,那么Reset_Handler处就是你编程开始的地方。”
我解释下,楼主第一条语句指定一个栈顶指针或者干脆直接写0x00或者任意(假设反正你又不用栈操作),第2条令写flash的起始地址,然后在该地址处存放程序就行了(这个麻烦点,你需要写一个汇编代码,来指出你的程序),这就是最简单的程序。当然都得用汇编写。最终发现你需要一个“启动文件”,但启动文件也可以简化到最小,那就是只有栈的定义、栈顶指针、复位向量和复位函数中直接开始操作LED灯的程序代码。如果用C语言特性,就复杂了,还是得要一个完整的启动文件。完整的启动如下图简单所示:

具体参考我的帖子:
http://jingyan.eeboard.com/article/version_preview/2119

一周热门 更多>