发新帖我要提问
12
返回列表
打印
[开发工具]

上电之后,main函数之前-Cortex M处理器的启动过程

[复制链接]
楼主: zhanzr21
手机看帖
扫描二维码
随时随地手机跟帖
21
zhanzr21|  楼主 | 2018-3-10 13:22 | 只看该作者 |只看大图 回帖奖励 |倒序浏览
bootloader的注意要点(MDK版本例子)
使用官方的Bootloader虽然方便,但是有以下理由促使程序员还要编写自己的bootloader:

使用官方bootloader需要更改boot0的状态,最终应用中做到这一点相当麻烦

使用官方bootloader需要实现官方的通信协议,虽然不是很复杂,但是没有更改的余地,导致无法加密无法压缩



使用特权

评论回复
22
zhanzr21|  楼主 | 2018-3-10 13:23 | 只看该作者
开始设计有bootloader的应用之后需要做的事情:

1.划分bootloader与Application的分野,此处以bootloader位于下方,只有一份用户App为例,当然实际情况取决于程序员对自己应用需求的分析


2.指定跳转bootloader跳转Application的条件,一般是Backup Region或者Flash或者外部引脚或者外部EEPROM做记号进行跳转,使得上电后默认跳入Application,只要在需要的时候才停留在bootloader中等待通信内容来升级


3.分别开发bootloader与Application.注意指定各自的Flash范围,最后生成hex以观察其占据的Flash位置,最后发布时进行合并.


4.通信协议设计,是否需要加密等等.


5.Bootloader的界面,一般情况无交互界面但是有基础的按键LED进行交互,有条件的可以设计图形化界面以方便操作人员.


使用特权

评论回复
23
zhanzr21|  楼主 | 2018-3-10 13:26 | 只看该作者
Bootloader+App内存分布示例

bootloader与Application的位置可以随意放置, 基本的原则就是在底部的代码需要负责检测输入, 上电后执行bootloader还是Application.

贴完了, 到此为止.

使用特权

评论回复
24
antusheng| | 2018-3-10 15:25 | 只看该作者
讲的可,学习学习

使用特权

评论回复
25
dsyq| | 2018-3-10 15:47 | 只看该作者
好 ,学习。

使用特权

评论回复
26
q7boy| | 2018-3-10 22:29 | 只看该作者
学习学习

使用特权

评论回复
27
lihui567| | 2018-3-11 09:02 | 只看该作者
zhanzr21 发表于 2018-3-10 13:16
注意SystemInit这个函数名为CMSIS标准所规定,用户可以不使用此名称的函数来完成上述功能,也可以玩全不调用 ...

这个初始化函数与滴答定时器没关系

使用特权

评论回复
评论
zhanzr21 2018-3-11 11:26 回复TA
SystemInit跟SysTick只是名字相似而已, 具体可以看看ST的工程中的SystemInit函数参考实现, 当然你自己也可以把Systick初始化放在此函数中, 这是程序员的自由. 
zhanzr21 2018-3-11 11:25 回复TA
根据CMSIS标准, 这个SystemInit函数跟Systick无关系, 只是作必要的初始化, 一般只做时钟初始化, 如果有外部存储器也可在此初始化(也可不在此初始化). 
28
lihui567| | 2018-3-11 15:18 | 只看该作者
lihui567 发表于 2018-3-11 09:02
这个初始化函数与滴答定时器没关系

滴答定时器的时钟就是系统时钟啊

使用特权

评论回复
29
ankeseng| | 2018-3-12 08:40 | 只看该作者

不错,很深入!

使用特权

评论回复
30
zhanzr21|  楼主 | 2018-3-12 10:57 | 只看该作者
lihui567 发表于 2018-3-11 15:18
滴答定时器的时钟就是系统时钟啊

不大明白你想表达的意思,

本贴子的意思:

Systick的时钟是系统时钟, 上楼说SystemInit就是初始化系统时钟和其它系统启动必须的配置, 当然也包括Systick的时钟.

Systick的配置还有其Tick频率, 是否发生中断等配置, 这些不属于SystemInit的内容.

这是F40x的一个SystemInit的例子:
void SystemInit(void)
{
  /* FPU settings ------------------------------------------------------------*/
  #if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
    SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2));  /* set CP10 and CP11 Full Access */
  #endif
  /* Reset the RCC clock configuration to the default reset state ------------*/
  /* Set HSION bit */
  RCC->CR |= (uint32_t)0x00000001;

  /* Reset CFGR register */
  RCC->CFGR = 0x00000000;

  /* Reset HSEON, CSSON and PLLON bits */
  RCC->CR &= (uint32_t)0xFEF6FFFF;

  /* Reset PLLCFGR register */
  RCC->PLLCFGR = 0x24003010;

  /* Reset HSEBYP bit */
  RCC->CR &= (uint32_t)0xFFFBFFFF;

  /* Disable all interrupts */
  RCC->CIR = 0x00000000;

#if defined (DATA_IN_ExtSRAM) || defined (DATA_IN_ExtSDRAM)
  SystemInit_ExtMemCtl();
#endif /* DATA_IN_ExtSRAM || DATA_IN_ExtSDRAM */

  /* Configure the Vector Table location add offset address ------------------*/
#ifdef VECT_TAB_SRAM
  SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */
#else
  SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */
#endif
}


如果还有什么高见, 请指教.

使用特权

评论回复
31
小鱼儿1045| | 2018-3-12 16:09 | 只看该作者

使用特权

评论回复
32
蝴蝶泉2018| | 2018-3-12 16:50 | 只看该作者
zhanzr21 发表于 2018-3-10 00:52
Cortex M7当然也有VTOR了,非此处重点,先不提.

具体到STM32系列的启动细节.

首先这篇东西还是有很多值得学习的地方,值得表扬贡献精神!!然后首先8楼第三项:(}3.SRAM,方便快速调试,另SRAM运行比Flash运行快,因为没有等待延迟,所以某些关键函数可以置于SRAM中运行.),这个是相对,对于有双sram的的mcu来说,它是效率高点,对于单片sram来说.他只是物理上效率高了,总体来看,它是变慢的.为什么?你可以看看系统总线那一节,你在sram上跑代码,预示着,你的指令(I)和数据(D)都是走同一个总线,我们的flash因为有ACT那个***,是可以做到零等待的,在系统级来看,他和sram的效果是一样.但是如果SRAM上同时要走指令和数据,可想而知,会变慢的,这个我之前有coremark试过的.

使用特权

评论回复
33
蝴蝶泉2018| | 2018-3-12 16:54 | 只看该作者
zhanzr21 发表于 2018-3-12 10:57
不大明白你想表达的意思,

本贴子的意思:

其实这个systick是可有可无的,在OS系统他,他几乎是必须的.我觉得应该是"系统时钟"这句话带来歧义,SystemInit是系统时钟的初始化,但是这个系统是指MCU这个系统.systick也是系统时钟,但是这个系统是指OS这类上层系统了...我猜是这个歧义吧..

使用特权

评论回复
34
蝴蝶泉2018| | 2018-3-12 16:56 | 只看该作者
zhanzr21 发表于 2018-3-10 13:22
写bootloader的注意要点(MDK版本例子)
使用官方的Bootloader虽然方便,但是有以下理由促使程序员还要编写自 ...

是的,MCU自带的bootloader是不可改变任何东西的,包括固定的接口和协议.所以我们才有另外一个叫IAP的程序,这个是开源的,你开源随意改协议,加一些加密程序,更改私有接口等等...

使用特权

评论回复
35
蝴蝶泉2018| | 2018-3-12 16:58 | 只看该作者
蝴蝶泉2018 发表于 2018-3-12 16:50
首先这篇东西还是有很多值得学习的地方,值得表扬贡献精神!!然后首先8楼第三项:(}3.SRAM,方便快速调试,另S ...

为什么加 速 器  三个字会变***?害我好紧张...会被敲门吗?

使用特权

评论回复
36
lihui567| | 2018-3-12 17:02 | 只看该作者
zhanzr21 发表于 2018-3-12 10:57
不大明白你想表达的意思,

本贴子的意思:

您对底层这块分析挺好的

使用特权

评论回复
37
简单happy| | 2018-3-12 21:20 | 只看该作者
不错,学习,多谢楼主分享。希望有更多类似的分享

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则