算法移植到STM32单片机中会遇到的一些问题

2023-05-16

    最近完成了一些算法,需要移植到STM32F4系列的板子上用作实际工程,其中遇到了许多的问题,下面记录一些调试bug的经验记录。

1、编译没有问题,但是调试运行时却会进入到某一函数无法运行,之后跳到内存出错的无限循环保护程序中。这样的问题一般是内存溢出的问题,F4的板子自带的内存空间是192k,但是在跑大一些的算法或者算法需要处理的文件较多的情况下,内存也会不够用,我这里的解决方法是使用外扩的SRAM,原子家的开发板是外扩1M的SRAM的,将相关的大数组用指针代替,然后申请内存空间到外扩SRAM即可解决。

2、算法需要对文件进行打开和读取操作,PC机可以用C语言的标准库stdlib.h中的fopen和fread等函数,但是单片机中不能用这个库,单片机中常用到的文件系统是FAFT文件系统,很容易就可以找到这个文件系统的操作函数,其中会有对应的f_open、f_read的函数,其功能基本类似,但参数位置有些变化,在使用时注意这些变化。另外在打开文件时返回了空字符串,这样的情况根据源程序的提示应该是读取发生错误,仔细检查程序之后发现我一共有两次打开操作,第一次没有问题,而第二次返回了空字符,两次没有放在一起,第一次打开时候又进行了许多文件操作,可能是这里产生了问题,把第二次打开文件操作与第一次操作都放到靠近程序开头,问题解决。

3、文件指针内存申请的问题,算法需要用到的内存空间很大,所以要把某些变量申请到外扩内存中,一维指针的没什么问题,只要如下这样申请就可以

fp=(FIL*)mymalloc(SRAMEX,sizeof(FIL));

但其中有一些二维指针作为数组来用,就不能简单的这么申请

x=(float**)mymalloc(SRAMEX,M*N*sizeof(float**));

这样申请出来只是M*N个指针,而不能像操作二维数组那样操作这个指针。应该如下申请才不会出错

x=(float**)mymalloc(SRAMEX,M*sizeof(float*));
for(i=0;i<M;i++)
{
	x[i] = (float*)mymalloc(SRAMEX,N*sizeof(float));
}
4、FATFS文件系统和c标准库中的文件系统操作差别还是很大的,在算法移植过程中遇到了许多的问题,最终也没有找到问题的根源,只是通过一些手段算是避开了这些问题,一种就是不要打开太多的文件,还有一种就是文件的打开和提取出文件中数据的计算不要放到一起,也就是先将所有文件打开然后将其中的内容加载到内存中,然后再对内存中的数据计算。这样就算是避免了文件打开的一些问题,但是这样却导致了另外一些似乎是内存溢出的问题,最后还是靠完成某些计算写入到文件中然后复位整个系统解决问题,但是这样只是算凑合完成了系统(我的算法比较复杂,消耗的资源非常大,其实是不太适合在单片机上运行的)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

算法移植到STM32单片机中会遇到的一些问题 的相关文章

  • 软件系统设计细节,你不知道的13个实践经验!

    记录道具来源等的 source 字段时 xff0c 可以使用 xff08 类名 43 方法名 xff09 xff08 包名 43 方法名 xff09 的组合 xff0c 可以清晰地区分来源 并且可以灵活地增加新的渠道 动作 涉及金额 钱的字
  • 从typro到Obsidian

    使用了typro 3年有餘 xff0c 最近看到yukang的年終博客 xff0c 又一次提到了Obsidian這個軟件 很久沒有還編輯工具的我 xff0c 想要折騰一下 於是 馬上開始 xff01 第一步 xff0c 啥也不知道 xff0
  • C++线程

    1 创建线程 span class token macro property span class token directive hash span span class token directive keyword include s
  • OpenGPT的11种高效用法

    1 问答提示 2 解释复杂的概念 3 创作 创作需要尽可能的缩小范围 xff0c 提出具体的要求 xff0c AI会给出更好的答案 4 准备面试 5 教师教案 6 编码和集成 7 健身 8 送礼推荐 9 翻译 这个甚至不用去演示 xff0c
  • 浅析鹅鸭杀中服务端的技术实现和要点

    在朋友的介绍下 xff0c 我下载了这款游戏 由于之前玩过 Among Us xff0c 我本以为这款游戏不会达到正宗的太空狼人杀的水平 xff08 毕竟是免费的 xff09 但实际游玩后 xff0c 我被它更加丰富的设定和玩法所吸引 接下
  • nginx代理静态网站css解析异常

    今天在使用ecs进行部署网页时 xff0c 出现了一个问题 使用nginx代理到页面index html路径下 xff0c 同路径的资源都可以加载到 xff0c 但是却无法正确加载到页面样式 打开f12 xff0c 网络和控制台都没有资源异
  • 为什么mysql的delete操作不释放磁盘空间

    在 InnoDB 中 xff0c delete 操作并不会真的删除数据 xff0c mysql 实际上只是给要删除的数据打了标记 xff0c 标记为删除 磁盘所占空间不会变小 xff0c 即表空间并没有真正被释放 一 MySQL 删除数据几
  • docker start :FAIL Hypervisor framework fails

    mac 上启动 Docker 提示 FAIL Hypervisor framework fails 提示环境变量出错 我这台 mac 是自己攒的生产力 xff0c 由于软件是直接从旧的 mac 上迁移过来的 xff0c 我怀疑可能是系统版本
  • 在google设置静态页面 CDN加速

    一 创建bucket xff0c 设置bucket 链接 xff1a https console cloud google com storage browser 创建bucket 设置bucket公开访问 在bucket列表中 xff0c
  • Google Cloud Storage CORS跨域允许,忽略访问控制来源标头

    google storage origin https xxx com has been blocked by CORS policy No Access Control Allow Origin header is present on
  • 聊天记录存储实践

    公司的某款游戏在1月初接入微软小冰AI聊天功能 为了保存聊天记录并为后续的统计功能做好准备 xff0c 决定将聊天记录存放在服务端 最初并不清楚聊天数据量的大小以及玩家对聊天功能的使用情况 xff0c 所以采用了价格和性能相对宽容的MySQ
  • 将本地服务通过ssh代理给外部访问(如何使用 ssh 将本地服务代理给外部访问并保持 SSH 会话的连接性)

    如何使用 ssh 将本地服务代理给外部访问并保持 SSH 会话的连接性 1 外部服务器 nginx 配置 server span class token punctuation span listen localhost 80 span c
  • Go 单元测试高效实践

    敏捷开发中有一个广为人知的开发方法就是 XP xff08 极限编程 xff09 xff0c XP 提倡测试先行 xff0c 为了将以后出现 bug 的几率降到最低 xff0c 这一点与近些年流行的 TDD xff08 测试驱动开发 xff0
  • 操作系统—分段与分页

    1 地址重定位 所谓的地址重定位 xff08 也叫地址翻译 xff09 就是修改程序中的内存地址 xff0c 使得程序被载入内存后 xff0c 那些地址能够指向正确的内存空间 例如 xff0c 程序中包含 call 40 语句 xff0c
  • putty连接被拒的原因分析

    1 xff1a 检查防火墙 2 xff1a PING虚拟机 3 xff1a SSHD etc init d sshd start开启服务 4 xff1a IP字段问题 ifconfig eth0 新IP xff08 更改为字段和主机一样的I
  • Charles+Postern抓包遇到的问题(已解决)

    问题描述 Charles的代理配置和Postern的代理配置的都是正确的 xff0c 但是当在手机上打开Postern中的开启VPN时 xff0c Charles上没有任何反应 解决方法 xff1a 我在多次配置实验无果的情况下 xff08
  • 4. ROS编程入门--PID控制器

    介绍 xff1a 这篇教程是交给大家怎么在ROS里写一个PID控制器 xff0c PID控制器有三部分 比例部分 xff08 P xff09 积分部分 xff08 I xff09 微分部分 xff08 D xff09 PID的输出是这三部分
  • 6. ROS编程入门--路径跟随(Trajectory following)

    Task 本次实验才采用 Follow the carrot 算法去跟随定义好的路径 控制的目标点在机器人行走的路径上 xff0c 距离机器人是个常数距离 机器人计算自己的方向角和目标点角度之间的相差度数 控制这个差角为0 为了在探测时候能
  • 位姿矩阵求逆

    位姿矩阵求逆 位姿矩阵分析位姿矩阵求逆矩阵 为了更好的说明问题 xff0c 我们先来看一下位姿矩阵的定义 位姿矩阵分析 如下图所示 xff1a 如果在B坐标系下有一点PB xff0c 我们需要知道该点在坐标系A下的坐标PA xff0c 怎么
  • UNIX环境高级编程

    环境配置 1 下载apue 3e文件夹 xff0c 可以通过http www apuebook com code3e html现在源码 2 解压后执行进入apue 3e中执行make指令 如果出现 96 96 96 collect2 err

随机推荐

  • C#连接SQL Server 数据库

    C 是如何跟SQL Server进行连接的 xff1f 在C NET程序设计中 xff0c 离不开ADO NET ADO NET是 NET连接数据库的重要组件 使用其可以很方便地访问数据库 xff0c ADO NET还可以访问Oracle数
  • 冒烟测试和回归测试的区别

    每次新的版本出来的时候 xff0c 老大就让我们 冒烟 虽然不知道冒烟测试的含义 xff0c 但由于没有给用例 xff0c 我就随便跑跑 跑完冒烟后 xff0c 老大就让做 回归测试 xff0c 把bug回归掉 但是其实对2个概念还是不太理
  • Webpack——02——打包html资源

    1 在src中创建webpack的入口文件index js xff0c index html 2 src的同级目录下创建webpack config js 3 下载插件html webpack plugin 老规矩 初始化 xff0c 下w
  • AT&T 汇编

    1 基础 x86 的寄存器为32位 xff0c x64 的寄存器为64位 寄存器间对应关系 xff1a 64位寄存器 低32位 低16位 低8位 rax eax ax al rbx ebx bx bl rcx ecx cx cl rdx e
  • 向导对话框[转]

    很久以前在网上看到的一片文章 xff0c 忘了是谁写的了 xff0c 觉得很好 xff0c 所以在这里转载 首先要了解的是CPropertySheet实际上是由一个TabCtrl加多个Page和多个按钮组成 这里强调一点 xff0c DoM
  • win10用pip安装face_recognize

    1 安装CMake 命令 xff1a pip install CMake 2 安装face recognition xff08 也可先安装dlib xff09 命令 xff1a pip install face recognition 查看
  • VS2019配置SFML

    VS2019配置SFML 1 下载安装SFML SDK 网址 xff1a https www sfml dev org download php 解压并放在文件夹里 xff0c 记住这个路径 在我的电脑中这个路径是F C 43 43 Pro
  • django学习笔记

    未更新完成 文章目录 一 什么是django1 1 有关django1 1 1 开始1 1 2 MVC框架 设计模式1 1 3 Django架构 MTV模型 1 2 安装配置开始django1 2 1 python和django1 2 2
  • 战略性放弃日记

    文章目录 20216 26 2021 6 26 在win10中部署linux子系统ubuntu时 xff0c 安装WSL图形界面遇到报错 ccsm命令后 xff0c 报错 NoneType object has no attribute g
  • docker安装linux-ubuntu桌面环境

    操作系统 xff1a win10 docker版本 xff1a 20 10 7 xff08 可通过docker version确认 xff09 在cmd或window power shell中输入命令 1 拉取镜像 docker pull
  • Cent OS7下载和安装图形桌面教程

    具体安装教程 下载地址 xff1a https www centos org download 1 进入官网 xff0c 找到下载 xff0c 下面三个ios镜像都可以选择 2 使用链接下载cent os ios centos7安装GUI图
  • Udacity 深度学习项目2(Project2) Image Classification 解析

    本项目需要搭建一个简单的卷积神经网络 xff08 CNN xff09 来对 CIFAR 10 数据进行图片分类 本文记录了这个项目的一些注意事项 xff11 数据的预处理 xff1a 对于CIFAR 10 的图片数据 xff0c 首先要做归
  • 网络程序设计——VC的多线程编程(线程与进程)

    目录 一 线程与进程 1 线程 2 引用线程的原因 3 线程与进程的关系 4 线程的特点 二 线程函数的参数传递 三 多线程与单线程的区别 四 线程创建函数 beginthread 和 beginthreadex 五 终止线程函数 一 线程
  • linux apt-get autoremove千万别乱用

    使用linux下的apt get autoremove命令的心得体会 前几天在实验室搭建要做人工智能项目的环境时 xff0c 由于未解决python2 7和python3 6共存时 xff0c 只利用python2 7版本的库文件 xff0
  • 嵌入式培训经验分享——网络编程项目实战(在线电子词典)

    在线电子词典采用服务器 43 客户端模式 xff0c 运用TCP协议通信 xff0c xff0c 服务器端直接连接数据库 1 服务器实现 功能 注册设计 如果用户没有注册 必须注册才能提供服务 包括修改用户名密码 xff08 1 xff09
  • MySQL事务

    1 事务性质 原子性 xff08 Atomicity xff09 xff1a 一个事务中的所有操作 xff0c 要么全部完成 xff0c 要么全部不完成 xff0c 不会结束在中间某个环节 一致性 xff08 Consistency xff
  • ROS中D435i的安装使用

    目录 D435i 安装ROS接口安装使用 Python接口安装opencv安装 xff08 相机标定 使用的依赖 xff09 D435i标定安装依赖标定发生的错误 D435i使用使用find object 2d检测2D物体 xff08 平面
  • win10远程桌面登录虚拟机Ubuntu

    在公司实习没事干 xff0c 想着折腾一下虚拟机 xff0c 于是用Windows win10 下的mstsc登陆一下虚拟机上的Ubuntu 14 04 桌面环境 顺便区别一下一般用telnet远程连接和使用桌面共享连接的区别 xff1a
  • octet和byte的差异

    在不严谨的前提下 xff0c byte和octet都表示为8 bits xff0c 但是严格意义上来讲 xff0c octet才是严格意义上的8 bits xff0c 而历史上的byte其实可以表示为4 bits 10 bits xff0c
  • 算法移植到STM32单片机中会遇到的一些问题

    最近完成了一些算法 xff0c 需要移植到STM32F4系列的板子上用作实际工程 xff0c 其中遇到了许多的问题 xff0c 下面记录一些调试bug的经验记录 1 编译没有问题 xff0c 但是调试运行时却会进入到某一函数无法运行 xff