当前位置: 首页 > wzjs >正文

网站管理系统后台不能发布文章了网络公关事件

网站管理系统后台不能发布文章了,网络公关事件,魔云手机建站,海城做网站公司文章目录 前言1、编译时的IRAM1和IRAM2 分别是什么意思啊2、多线程时使用Printf进行打印,为什么有些日志会被吞掉呢?3. 程序下载不进去,提示Contents mismatch at: 08006B3CH4. 裸机开发中因栈空间不足导致的反复重启问题STM32裸机开发如何调…

文章目录

  • 前言
  • 1、编译时的IRAM1和IRAM2 分别是什么意思啊
  • 2、多线程时使用Printf进行打印,为什么有些日志会被吞掉呢?
  • 3. 程序下载不进去,提示Contents mismatch at: 08006B3CH
  • 4. 裸机开发中因栈空间不足导致的反复重启问题
    • STM32裸机开发如何调整栈深度
    • 栈大小的选择依据
    • 解决办法
    • 裸机开发和基于FreeRTOS的开发栈调整的方式差异
  • 5. 下载时提示 下载到flash出错(Selected Data (0x8000 - 0xc543) does not fit ..)


前言

记录下在使用STM32L4系列芯片进行开发时,碰到的各种问题,第4期。

比较杂。

1、编译时的IRAM1和IRAM2 分别是什么意思啊

请添加图片描述
在Keil5编译环境中,​​IRAM1​​和​​IRAM2​​分别指代嵌入式芯片内部不同物理地址段的​​片内随机存取存储器(On-Chip RAM)​​,其核心区别在于​​内存空间的分配逻辑​​和​​应用场景​​


基础定义与芯片关联性

  1. IRAM的物理本质
    IRAM(Internal RAM)是芯片制造商在MCU内部集成的RAM存储单元,其地址范围由芯片的Memory Map决定。例如:
    • STM32F407的IRAM1地址为0x20000000(128KB),IRAM2为0x10000000(64KB)

    • CW32L010F8的IRAM1地址为0x20000000(4KB),无IRAM2

  2. Keil中的配置逻辑
    Keil通过工程设置中的Target -> Read/Write Memory Areas定义IRAM的地址和大小,但该界面仅支持两段RAM设置。对于多RAM区间的芯片(如STM32H7B0),需通过分散加载文件(.sct)完整描述所有物理RAM段。


二、IRAM1与IRAM2的功能差异

维度IRAM1IRAM2
默认用途存放全局变量、栈(Stack)和堆(Heap)扩展用途(如DMA缓冲区、RTOS任务栈)
启动代码初始化startup_xxx.s中的初始化代码清零需手动管理或通过分散加载文件指定初始化
访问速度通常与CPU同频,延迟更低可能位于低速总线(如AHB2),延迟略高
典型配置主程序运行的核心RAM区可选配置,部分芯片无此区域

2、多线程时使用Printf进行打印,为什么有些日志会被吞掉呢?

printf函数打印的工作原理

printf是C标准库函数,其内部实现依赖于底层字符输出函数fputc。每次调用printf时,它会遍历格式化字符串,逐个字符调用fputc进行输出。

// 用户自定义的fputc实现(以串口为例)
int fputc(int ch, FILE *f) {HAL_UART_Transmit(&huart1, (uint8_t*)&ch, 1, 1000);  // 发送到串口1return ch;
}
-	​​关键代码路径​​:printf() → vfprintf() → __fputc() → ​​用户重写的fputc​

怀疑点
STM32中的HAL_UART_Transmit函数的调用本身不是线程安全的,当多个线程同时调用它时,会导致对统一硬件资源(UART)的竞争,进而覆盖数据,因此,需要互斥锁或者队列保证同一时间只有一个线程访问UART。

写代码测试
我们写两个线程进行打印的功能,1个高优先级的线程,1个低优先级的线程,让两个线程不停的打印信息,查看现象
请添加图片描述
查看下方的测试结果能够看到,高优先级任务打印的内容反而丢的更多,所以也怀疑是printf函数调用结束之后
请添加图片描述

改善办法
可以通过在printf函数之前加上互斥锁,进行有效的解决

我们写两个线程,1个高优先级的线程,1个低优先级的线程,让两个线程不停的打印信息,查看现象

请添加图片描述
查看现象问题得到有效的解决。
请添加图片描述

3. 程序下载不进去,提示Contents mismatch at: 08006B3CH

问题现象
请添加图片描述
问题原因
请添加图片描述

4. 裸机开发中因栈空间不足导致的反复重启问题

问题描述
在将一个比较大的公共组件移植到非操作系统的设备上时,发现一运行就动不动崩溃,关键是看代码逻辑也看不出来什么问题。
然后排查了一些时间,发现是栈空间不足导致的,之前在基于FreeRTOS的开发中也经常碰到这个问题,这里就简单说一下

STM32裸机开发如何调整栈深度

通常,栈的大小在启动文件(startup_stm32xxxxx.s)中定义,用Stack_Size这个EQU来设置。不同的STM32系列可能有不同的默认值,比如F1可能默认是0x400(1KB),而F4可能更大,比如0x800(2KB)。但具体数值需要根据具体的启动文件来确定,不同的编译环境(如Keil、IAR、STM32CubeIDE)也可能有不同的默认设置

如何确定合适的栈大小。这时候需要考虑应用中的函数调用深度、中断嵌套层数以及局部变量的大小。如果函数递归调用层次深,或者中断频繁且嵌套多,局部变量占用空间大,就需要更大的栈空间。相反,简单的应用可能不需要太大的栈。

Keil的map文件可以查看函数的调用深度和局部变量的大小;而调试时,可以通过填充栈内存并检查最大使用量来确定实际需求。

栈大小的选择依据

RAM中数据的分布
High Address →
┌───────────────┐
│ Stack │ ← 栈顶(向下生长)
├───────────────┤
│ Heap │ ← 堆(向上生长)
├───────────────┤
│ .bss │ ← 未初始化全局变量
├───────────────┤
│ .data │ ← 已初始化全局变量
└───────────────┘
Low Address →

栈中存放哪些信息
存放局部变量、函数调用时的返回地址、函数参数、中断上下文(寄存器保存)等。

解决办法

所以我们可以根据当前使用芯片的RAM大小和程序中使用栈的情况基本能够有个预估。
比如我这里用的芯片RAM有100K,我明知道我全局变量啥的用的很少,但是我局部变量用的很多,所以我把栈的大小从1K调整到了4K。

请添加图片描述

裸机开发和基于FreeRTOS的开发栈调整的方式差异

裸机
裸机开发时,我们所有的消耗都是消耗的主栈(MSP)的。

使用FreeRTOS

使用了RTOS时,每个任务会有自己的栈空间,这时候主栈(MSP)的大小可能不需要太大,因为在线程模式下,任务栈由PSP管理,而主栈主要负责处理异常信息和中断,所以主栈的压力会小很多

5. 下载时提示 下载到flash出错(Selected Data (0x8000 - 0xc543) does not fit …)

问题现象
程序编译好后,使用Jflash和Keil5进行下载都提示下载失败,按照网上的教程重新擦除后再下载也不行。
在这里插入图片描述

解决办法
发现我程序写入到Flash的起始地址是0x00008000,正常情况下应该是0x0800 0000。在这里插入图片描述
然后意识到是自己的一些配置项配错了(Use Memory Layout from Target Dialog)没有配置,因为之前我们都是使用的自己写的程序链接脚本,然后现在更换成了Keil5上界面配置的后,没注意到要勾选这里。
请添加图片描述


文章转载自:

http://LJrhVAO0.gwmny.cn
http://uTW5h7Pe.gwmny.cn
http://hA2dv2Kx.gwmny.cn
http://NdgDWTqO.gwmny.cn
http://6fXY3tN1.gwmny.cn
http://FRHI3jCN.gwmny.cn
http://52gttPDe.gwmny.cn
http://87gexFcW.gwmny.cn
http://fndzQf9z.gwmny.cn
http://HckNChYz.gwmny.cn
http://9VS0yq0c.gwmny.cn
http://aBHqEbg8.gwmny.cn
http://QSOS62Nb.gwmny.cn
http://aCIKpofh.gwmny.cn
http://D1339aRh.gwmny.cn
http://AOpMRctm.gwmny.cn
http://4rSYUtLA.gwmny.cn
http://mmKCEBQk.gwmny.cn
http://fOCf1TpR.gwmny.cn
http://XyAn2Iw2.gwmny.cn
http://TmeVfzwS.gwmny.cn
http://O14Inn2X.gwmny.cn
http://lTXdPrti.gwmny.cn
http://O0yu85ep.gwmny.cn
http://O0xSMBJg.gwmny.cn
http://2P4My3Kq.gwmny.cn
http://cXvRj9nM.gwmny.cn
http://10detDfU.gwmny.cn
http://isdiI7e2.gwmny.cn
http://92Q74TpZ.gwmny.cn
http://www.dtcms.com/wzjs/773390.html

相关文章:

  • 广东省网站免备案表制作网站哪家专业
  • 政务网站建设总结上高做网站公司
  • 网站开发维护运维云指建站平台
  • 哪个公司做公司网站好网站建设实践
  • 龙华网页设计公司网站深圳兼职做网站
  • WordPress网址导航主题HAOWA青岛网站优化排名
  • 快速建站公司怎么样网页设计入门基础知识
  • 济南网站seo优化河南网站建站系统哪家好
  • 音乐网站可以用什么语言做罗湖网站建设多少钱
  • 建站模板网站WordPress tag 分类
  • 网站建设 自学沈阳中小企业网站制作
  • 可信的品牌网站建设wordpress 如何制作模板
  • 惠州网站建设技术支持店铺设计方案
  • 黄冈论坛网站有哪些网站建设中图片尺寸
  • ps做字幕模板下载网站做电影网站一年赚多少
  • 雕刻业务网站怎么做用手机做网站好学吗
  • 深圳做营销网站的公司哪家好产品导航网站源码
  • 珠海品牌机械网站建设创意餐厅网站建设文案书
  • 淘宝网首页登录网页版太原企业网站seo
  • 优质企业网站建设wordpress文章标题字体太大
  • 黄岩网站开发哪个网站做电商门槛最低
  • 阿里云投数亿资源扶持中小网站迁移服务器企业网易邮箱登录入口官网
  • 百度网盘搜索百度seo如何做
  • 怎样投网站广告龙岗营销网站建设
  • 网站开发需要几个人seo关键词优化排名软件
  • 浙江省互联网建设网站资阳seo优化公司
  • 网站建设报价网站建设报价单网页制作培训心得
  • 外贸人常用网站wordpress 列表图片
  • 怎么做网站页面免费的两个WordPress内容同步
  • 信息网站建设方案搭建网站 软件