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

X-Cube-ClassB代码 的移植(肆)

[复制链接]
eefishing 发布时间:2020-1-19 20:14
运行中的检测部分

在主循环中周期进行,在STL_DoRunTimeChecks中,通过检查TimeBaseFlag标识的值来决定是否要进行检测,TimeBaseFlag在SysTick_Handler中根据需要的时间间隔进行设置。
除了RAM检测在SysTick中断中进行,时钟周期计算在Timer中断中进行以外,其他的检测都在主循环中完成。
在运行STL_DoRunTimeChecks函数之前,必须进行runtime检测模块的一些初始化工作。
所以代码中需要修改的地方有:
  • 修改SysTick_Handler
  • Timer中断处理函数中计算LSI时钟周期(跟上电时的一样,所以不用再修改)
  • 在main函数初始化部分调用STL_InitRunTimeChecks
  • 在主循环中调用STL_DoRunTimeChecks函数


01
Flash检测
在运行中对Flash的检测分块进行,每次检测一小部分。每次检测的块(block)的大小由FLASH_BLOCK_WORDS定义,默认是16个字的长度。检测的范围应该是多个FLASH_BLOCK_WORDS的大小,必须是对齐的。
存放CRC值的位置是应该排除在计算的范围内的。

02
RAM检测
在运行过程中只检测和安全相关的变量,这些变量都被放在同一个连续的区域,也就是CLASS_B_RAM区域。CLASS_B_RAM区域的大小可以在分散加载文件中进行调整。
这个区域的变量包括所有定义在stm32fxx_STLclassBvar.h中的变量,如果应用程序中有和安全相关的变量也可以定义在这个区。检测范围也是在stm32fxx_STLparam.h中定义:
1.jpg
需要注意在stm32fxx_STLparam.h中定义的CLASS_B变量的范围,也要和sct文件中的定义一致:
2.jpg

03
堆栈边界检测
堆栈边界检测由STL_CheckStack函数完成,在启动的时候STL_StartUp结束时向位于栈底边界的aStackOverFlowPtrn数组写入了特殊的数值,运行时,再在STL_CheckStack函数中对其进行检查来发现是否有堆栈溢出的情况。
移植的时候需要注意的是aStackOverFlowPtrn的位置是必须指定的。这个通过在分散加载文件定义STACK_BOTTOM域指定位于栈底边界。再在代码中定义aStackOverFlowPtrn并指定位置:
3.jpg

04
Watchdog
例程中运行时,是在STL_DoRunTimeChecks的末尾进行“喂狗”。那在我们自己的代码中需要尽量保证只有一个地方“喂狗”,并保证“喂狗”的时间间隔。
那么可以根据应用需要,调整STL_InitRunTimeChecks中有关初始化IWDG,WWDG的参数,以保障“喂狗”的时间间隔和应用程序相适应。
例程中默认IWDG的“喂狗”时间设置为约50ms
4.jpg
IWDG的timeout时间计算公式(STM32F2x5):
5.jpg
WWDG的初始化:
6.jpg
WWDG的timeout时间计算公式(STM32F2x5):
7.jpg

收藏 评论0 发布时间:2020-1-19 20:14

举报

0个回答

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版