查看: 4283|回复: 4

[原创] KL系列初始化函数启动执行顺序

[复制链接]

该用户从未签到

13

主题

62

帖子

0

中级会员

Rank: 3Rank: 3

积分
238
最后登录
1970-1-1
发表于 2014-7-29 15:06:04 | 显示全部楼层 |阅读模式
 LZ最近在用KL02,移植了官网提供的例程。但在启动代码分析时,遇到了难题。
首先下图在野火的说明文档上看到的启动过程分析:
KL启动分析.png
以下结合我的代码具体说明:
vectors.png
这里产生了第一个疑问:VECTOR_000指向的堆栈指针__BOOT_STACK_ADDRESS是在哪里定义的?
接下来的图是在crt0.s文件中__startup对应的汇编代码:
crt0.s.png
在编译时产生了很多莫名其妙的错误。。难道是我的编译器设置不支持汇编?求大神指教。
我看到有的例程里面并没有加入crt0.s文件,不加入这个文件的话可以启动吗?
之后即使进入第三步start.c文件执行start函数,该函数没问题。
void start(void)

  /* Disable the watchdog timer */
  SIM_COPC = 0x00;
  /* Copy any vector or data sections that need to be in RAM */
#ifndef CMSIS    // If conforming to CMSIS, we do not need to perform this code
#ifndef BOOTLOADER
        /* Copy any vector or data sections that need to be in RAM */
        common_startup();
#endif
#endif
  /* Perform processor initialization */
  sysinit();
#ifndef BOOTLOADER      
  printf("                \r\n");
  /* Determine the last cause(s) of reset */
  outSRS();       
  /* Determine specific Kinetis device and revision */
  cpu_identify();
#endif       
 
/* in KEIL, should not call main, but in starup_MKL05Z4.s Reset_Handler */
#ifndef KEIL    
  /* Jump to main process */
  main();
  /* No actions to perform after this so wait forever */
  while(1);
#endif
}
不知道以上的启动过程是否正确,请大神赐教。
 
回复

使用道具 举报

该用户从未签到

124

主题

3600

帖子

0

金牌会员

Rank: 6Rank: 6

积分
5781
最后登录
1970-1-1
发表于 2014-7-30 09:32:01 | 显示全部楼层

RE:KL系列初始化函数启动执行顺序

你好,楼主!
1. _BOOT_STACK_ADDRESS是在linker 文件中定义的,这个你可以不用管它。
2. 如果工程没有crt0.s文件,就应该会有相似的启动文件,启动原理是一样的。
3. 如果你下载的是FSL官网给出的FRDM-KL05Z例程包内的例程,应该不会出错的,你可以试试。
回复 支持 反对

使用道具 举报

该用户从未签到

13

主题

62

帖子

0

中级会员

Rank: 3Rank: 3

积分
238
最后登录
1970-1-1
 楼主| 发表于 2014-7-30 15:50:20 | 显示全部楼层

回复:KL系列初始化函数启动执行顺序

回复第 2 楼 于2014-07-30 09:32:01发表:
你好,楼主!
1. _BOOT_STACK_ADDRESS是在linker 文件中定义的,这个你可以不用管它。
2. 如果工程没有crt0.s文件,就应该会有相似的启动文件,启动原理是一样的。
3. 如果你下载的是FSL官网给出的FRDM-KL05Z例程包内的例程,应该不会出错的,你可以试试。
 
 
您好,非常感谢您的回答。针对第二点和第三点:
2.K02的例程里,工程文件夹里面确实没有crt0.s文件,可能正如您讲的有相似的启动文件,待会好好看一下。
3.我从官网上新下载了一个例程,编译没问题。可能是我之前下载的历程有问题。
但是官网上的例程配置的调试方式是openSD和Jlink Trace。
如下图所示,
debug.png
我想用的是PE USB Multilink,不知道是否可以将官网上的例程更改为PE USB Multilink的调试方式。
之后,我新建了一个MCU工程,选择了PE USB Multilink的调试方式,但编译出现了错误,
error.png
百度了一下,也没有找到解决的方法。我在工程里面没有用PE生成代码,是用的例程的底层驱动,没有用PE工具和能不能用PE USB Multilink调试器应该没有关系吧。
将工程上传一下,麻烦您帮我编译看一下。
Sensor3.0.zip (722.5 KB, 下载次数: 1)
回复 支持 反对

使用道具 举报

该用户从未签到

16

主题

705

帖子

0

金牌会员

Rank: 6Rank: 6

积分
1745
最后登录
1970-1-1
发表于 2014-9-4 15:47:17 | 显示全部楼层
PE mulitlink的,楼主自己新建一个嘛,和opensda的新建方法类似。
回复 支持 反对

使用道具 举报

该用户从未签到

7

主题

64

帖子

0

中级会员

Rank: 3Rank: 3

积分
314
最后登录
2016-11-18
发表于 2015-11-20 23:04:59 | 显示全部楼层
现在也很想知道这个启动顺序,不知楼主搞清楚了没有
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-7-26 13:46 , Processed in 0.092777 second(s), 24 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

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