写定制程序容易遇见的问题(FLASH不够时)

做了一个关于定制两条串口协议的活,主要是要在源代码基础上进行修改。源代码只剩了200多字节flash。本来最初我的想法很奇特,用结构体来模仿寄存器的写法。当我写完几行代码后,编译链接,立马就报CODE内存超了。

然后最终还是选择去修改原协议关于数据包解析的底层,其实就是一些值和字符串的互转函数,如果直接用c的库就是sprintf。

思路就是在原处理函数内新增新协议的解析。如果有其他需求就在别的地方稍作修改。重要的是我把前面写的字符串与值进行互转的函数合并了一堆,为了节省内存,原来用5个字节的地方(单个10进制值或者16进制值转字符串就是2个位 例如 11 --> '1','1',但是字符串应该是'1','1','\0'),我改成了2个,最后造成了添加不上字符串结束符的错误,造成数组越界了。这个问题其实不是很严重,debug能出来,但是对于仿真器仿真速度奇慢,还老是软甲卡死的情况下,这简直就是煎熬,就是求它别卡。

这里我的心得就是别的值转字符串一定要留出加结束符'\0'的位置。整个程序改完,我还剩下50字节的容量。我的天哪,省内存可太难了。最初改的时候试过各种方法,只有改原有的底层接口才能缩减内存占用。

后记:如果是要改定制程序,过来人的意见。

1.备份初始程序(我中间找大哥要了好几次源程序)。

2.检查硬件问题。仿真器线序,硬件的烧录接口。

3.如果仿真器和串口助手同时插上,打不开串口助手的原因可能是 供电不够。改了jlink供电加串口模块才够用,原仿真器是msp430的不够用(这点真是我试出来的)。

4.如果改新功能请(内存不够)先缩减源程序内存,调试好老程序再添加新的。不然的话新的调通了还得回去调老的。

5.先确定好方案,再去写。对于有些古早的单片机,找不到对应例程就很难。比如我想使用msp430某个系类芯片的定时器。我找了好久没找到解决方法,也没怎么看数据手册,我想不就是一个定时中断清标志位的事吗,初始化定时器不就解决了。关键就是这个中断标志位,问钉钉的ai才问出来。

6.改完代码,自测。测完就要了解后续是干什么,是提交什么文件和表单还是干什么。我以为提交给老哥就没事了,谁知道后面还复杂着呢。

7.记得写个类似于日记的东西,你的记忆力没有你想的那么强。

有的时候,我常常感叹。如果前人给我一个经验手册,那我就不必那么误打误撞。在此,感谢每个愿意发自己经验分享给后辈的伟大先驱者。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/64631.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Leetcode 热题 100 - 扩展】303. 区域和检索 - 数组不可变

问题背景 给定一个整数数组 n u m s nums nums,处理以下类型的多个查询: 计算索引 l e f t left left 和 r i g h t right right(包含 l e f t left left 和 r i g h t right right)之间的 n u m s nums nums 元素的 和 &a…

本地缓存和Redis缓存 存储更新时间的更新套路

//先获取redis key和local key //从reids中获取数据 – 为空 先设置redis缓存30天,value为当前时间 然后设置本地缓存,value为当前时间 从数据库里读数据 – 不为空 获取本地缓存时间 if本地缓存时间 < redis缓存时间(认为已更新)或者本地为空 从数据库读数据 else 从本地缓…

处理错误的两种方式:try...catch 与 then...catch

一、try...catch try...catch 是一种用于捕获和处理同步代码中异常的机制。其基本结构如下&#xff1a; try {// 可能会抛出异常的代码 } catch (error) {// 处理异常 }使用场景&#xff1a; 主要用于同步代码&#xff0c;尤其是在需要处理可能抛出的异常时。适用于函数调用…

【十进制整数转换为其他进制数——短除形式的贪心算法】

之前写过一篇用贪心算法计算十进制转换二进制的方法&#xff0c;详见&#xff1a;用贪心算法计算十进制数转二进制数&#xff08;整数部分&#xff09;_短除法求二进制-CSDN博客 经过一段时间的研究&#xff0c;本人又发现两个规律&#xff1a; 1、不仅仅十进制整数转二进制可…

【Harmony Next】多个图文配合解释DevEco Studio工程中,如何配置App相关内容,一次解决多个问题?

解决App配置相关问题列表 1、Harmony Next如何配置图标&#xff1f; 2、Harmony Next如何配置App名称&#xff1f; 3、Harmony Next如何配置版本号&#xff1f; 4、Harmony Next如何配置Bundle ID? 5、Harmony Next如何配置build号&#xff1f; 6、Harmony Next多语言配置在哪…

Mybatis分页插件的使用问题记录

项目中配置的分页插件依赖为 <dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.1.7</version></dependency>之前的项目代码编写分页的方式为&#xff0c;通过传入的条件…

Anthropic 工程师关于提示词工程的深入探讨

李玉光 北京聚云科技有限公司 联合创始人兼首席架构师 拥有 12 年以上的 Amazon Web Services 开发与架构经验。擅长设计和实施大规模、高弹性、自动化的云原生解决方案。云成本优化方面经验丰富&#xff0c;帮助众多企业有效降低云使用成本。并协助各类行业客户利用 Amazon We…

SpringBoot之validation参数校验并返回统一格式提示

前言 在日常的开发过程中&#xff0c;后端需要经常对参数进行校验&#xff0c;比如某参数不能为空&#xff0c;格式等&#xff0c;只有校验通过后才可以执行后续的业务逻辑&#xff0c;否则就要在接口返回错误信息给前端。 一般情况下&#xff0c;可以使用if…else…来校验参数…

【技术干货】移动SDK安全风险及应对策略

移动SDK&#xff08;软件开发工具包&#xff09;已经成为应用开发中不可或缺的一部分。通过SDK&#xff0c;开发者能够快速集成分析、广告调度、音视频处理、社交功能和用户身份验证等常见功能&#xff0c;而无需从零开始构建。这不仅能节省时间和资源&#xff0c;还能提高开发…

MATLAB中cvx工具箱的使用

CVX 是 MATLAB 中一个用于解决凸优化问题的建模工具箱。它使得定义、求解和分析凸优化问题变得简单。CVX 允许用户用类似数学表达的方式编写凸优化问题&#xff0c;而不需要过多关注底层的优化算法。CVX 的核心功能是将一个简单的数学问题转化为 MATLAB 可以理解并求解的标准形…

易语言OCR银行卡文字识别

一.引言 文字识别&#xff0c;也称为光学字符识别&#xff08;Optical Character Recognition, OCR&#xff09;&#xff0c;是一种将不同形式的文档&#xff08;如扫描的纸质文档、PDF文件或数字相机拍摄的图片&#xff09;中的文字转换成可编辑和可搜索的数据的技术。随着技…

新能源汽车充电需求攀升,智慧移动充电服务有哪些实际应用场景?

在新能源汽车行业迅猛发展的今天&#xff0c;智慧充电桩作为支持这一变革的关键基础设施&#xff0c;正在多个实际应用场景中发挥着重要作用。从公共停车场到高速公路服务区&#xff0c;从企业园区到住宅小区&#xff0c;智慧充电桩不仅提供了便捷的充电服务&#xff0c;还通过…

QT多媒体开发(一):概述

Qt Multimedia 模块为多媒体编程提供支持。多媒体编程实现的功能主要包括播放音频和视频文件&#xff0c;通过麦克风录制音频&#xff0c;通过摄像头拍照和录像等。 QT6 中多媒体模块相比QT5变化较大&#xff0c;所以用QT6编译 QT5写的多媒体 程序基本无法通过。 Qt 5 多媒体模…

道可云人工智能元宇宙每日资讯|浙江工商大学发布“人工智能时代创新型人才培养行动计划”

道可云元宇宙每日简报&#xff08;2024年12月20日&#xff09;讯&#xff0c;今日元宇宙新鲜事有&#xff1a; 浙江工商大学发布“人工智能时代创新型人才培养行动计划” 12月18日&#xff0c;浙江工商大学发布了《人工智能时代创新型人才培养行动计划》&#xff0c;提出人工…

Unity 上好用的插件

PlayerMaker BehaviorDesigner Cinemachine Timeline Hybrid Addressable AssetBundle Blower Simple Zoom 大地图上缩放和平移使用ScrollRect的好效果实现

BFS最短路径问题模板题

//输入格式 //输入包含10行&#xff0c;每行10个字符&#xff0c;描述这个农场的布局。输入保证图案中恰有一个字符 B、一个字符 L 以及一个字符 R。 //输出格式 //输出一个整数&#xff0c;为组成一条从B到L的的最短路径&#xff08;避开R&#xff09;。 //https://www.luogu.…

人才画像系统如何支撑企业的人才战略落地

在当今竞争激烈的商业环境中&#xff0c;企业的人才战略对于其长期发展至关重要。为了有效实施人才战略&#xff0c;企业需要一套精准、高效的人才管理工具&#xff0c;而人才画像系统正是满足这一需求的关键解决方案。本文将探讨人才画像系统如何支撑企业的人才战略落地&#…

基于Python3编写的Golang程序多平台交叉编译自动化脚本

import argparse import os import shutil import sys from shutil import copy2from loguru import loggerclass GoBuild:"""一个用于构建跨平台执行文件的类。初始化函数&#xff0c;设置构建的主文件、生成的执行文件名称以及目标平台。:param f: 需要构建的…

初学stm32 --- 定时器中断

目录 时钟选择&#xff1a; 内部时钟选择​编辑 时钟计算方法&#xff1a; 计数器模式 向下计数模式&#xff08;时钟分频因子1&#xff0c;ARR36&#xff09; 向上计数模式&#xff08;时钟分频因子1&#xff0c;ARR36&#xff09; 中央对齐计数模式&#xff08;时钟分频因…

Pytorch | 从零构建Vgg对CIFAR10进行分类

Pytorch | 从零构建Vgg对CIFAR10进行分类 CIFAR10数据集Vgg网络结构特点性能应用影响 Vgg结构代码详解结构代码代码详解特征提取层 _make_layers前向传播 forward 训练过程和测试结果代码汇总vgg.pytrain.pytest.py 前面文章我们构建了AlexNet对CIFAR10进行分类&#xff1a; Py…