软件调试笔记31 - 栈和函数调用:栈的创建

ARM Cortex-M异常处理机制探秘:硬件压栈与栈回溯的底层对话 本文深入探讨ARM Cortex-M异常处理机制,重点分析硬件自动压栈过程与栈回溯技术。详细解析HardFault异常发生时处理器的硬件行为,包括FPU场景的特殊处理及RTOS环境下的调试技巧,帮助开发者快速定位和解决嵌入式系统崩溃问题。 阅读详情



保留栈和初始提交的大小是可以设置的。对于EXE文件,还可以通过EDITBIN工具来修改。




IS31FL3731驱动LED矩阵的硬件设计与软件实现 LED驱动技术是嵌入式系统开发中的重要组成部分,通过PWM调光可以实现精确的亮度控制。IS31FL3731作为一款I2C接口的LED驱动芯片,支持144个独立通道和8位PWM调光,特别适合需要多LED控制的创意项目。其工作原理是通过内部行扫描机制减轻MCU负担,配合PIC18F85K90等微控制器的硬件I2C模块,可以构建稳定高效的LED显示系统。在工程实践中,这种组合广泛应用于可编程灯板、互动艺术装置等场景。通过优化I2C通信协议、实现双缓冲机制和Gamma校正,可以显著提升LED矩阵的显示效果和刷新率。 阅读详情

相关推荐

QT项目实战之串口调试助手

目录 一、前言 1、关于字符集编码的延伸阅读 2、关于字符编码几点的总结 二、功能与效果 1、效果 2、功能 三、实现过程 1、创建QMainWindow窗口与UI设计 2、代码实现 1、信号和槽的关联方式 2、文件发送和文件保存 3、配置信息的保存 4、字符与16进制编码字符的互相转换 3、工程打包发布 1、使用QT自带的windeployqt.exe打包 2、使用HM NIS Edit编辑器与NSIS编译器更深层次打包 四、功能测试 一、前言 给大家安利一款自己编写

hurryddd 4012

函数调用:栈帧的开辟与回退

一份源文件是由数据和指令组成的,函数通常作为指令和数据的集合被人们创造出来实现各种功能。就是这个我们天天在调用着的函数,你有没有想过: 1.我们在调用它的时候系统做了什么? 2.main函数中如果还有另一个函数,在跳转后运行完这个函数时,编译器怎么知道下一行执行哪个语句呢?会不会又从头执行了? 3.函数在结束之后(运行到反花括号“}”处),系统又是怎么处理的? 4.不同的语言对函数形参内存...

Eyoru的博客 1887

31、软件开发中的版本控制、测试与调试技巧

本文详细介绍了软件开发中的版本控制、测试与调试技巧。内容涵盖主流版本控制系统(如 Git、Subversion 和 Mercurial)的使用,测试的不同级别(单元测试、集成测试和系统测试)及其设计方法,以及实用的调试技巧(如打印调试信息、使用调试器和二分法调试)。同时,还探讨了结对编程和测试驱动开发(TDD)在提高代码质量中的作用,帮助开发者掌握高效开发和调试的策略。

Jerry的专栏 117

读书笔记_栈的创建过程

首先看内核栈的创建过程:PspCreateThread函数是windows内核中用于创建线程的一个重要的内部函数,无论是创建系统线程(PsCreateSystemThread)还是用户线程(NtCreateThread),都离不开这个函数,除了创建重要的ETHREAD结构,PspCreateThread函数的另一个重要的任务是创建内核态栈。 对于GUI线程,Windows会为其创建大内核栈,但是...

wodamazi 533

31、软件开发中的版本控制、调试与测试

本文详细探讨了软件开发中的版本控制、调试与测试。内容涵盖主流的版本控制系统如 Subversion、Git 和 Mercurial 的使用与区别,介绍了结对编程在提升代码质量中的作用,并深入解析了单元测试、集成测试和系统测试的不同层次及其重要性。同时,文章分析了测试中常见问题的成因及解决策略,比较了传统测试方法与测试驱动开发(TDD)的优劣,并提供了各类测试的具体操作指南和流程示例。最终总结了版本控制、调试与测试在软件开发质量保障中的关键作用,并提出了实践建议。

efc123456的博客 96

31、ARTIK应用开发:调试、部署与未来展望

本文详细介绍了ARTIK应用开发中的关键环节,包括调试和部署的具体方法,以及开发流程的未来展望。文章涵盖了硬件调试工具如JTAG和OpenOCD的使用,调试后的清理工作,多种应用部署方式的选择,大规模生产的考虑因素,以及如何将ARTIK模块集成到最终产品中。此外,还提供了不同ARTIK模块的适用场景和寻找项目创意的途径,帮助开发者全面提升技能,开发出创新的物联网应用。

tensor9flow的博客 108

T31开发笔记: 串口调试

君正T31串口0测试

2705

AlgoWorks消防主机调试软件安装与实战指南-ST-1-96A版本

在第一章中,我们将对西门子消防主机的31和51系列进行一个基础性的介绍。这一部分是全文的基础,旨在为读者提供一个概览,帮助理解后续章节中所涉及到的专业术语和操作流程。西门子消防主机系列是行业内广为人知的智能火灾自动报警与控制系统,主要应用于工业和大型商业建筑。31和51系列以其高度的稳定性和可靠性,满足了高标准的安全需求。这些系列拥有强大的数据处理能力,可实现多个子系统的联动,确保在火灾发生时可以迅速做出响应。登录系统之后,用户将面对AlgoWorks的主要操作界面。

weixin_42103128的博客 1239

史上最全:Jetbrains全家桶31款软件 分类+功能整理收集

我算了一下,Jetbrains共发布了31款软件+工具。新手使用jetbains的软件时难免会遇到难以选择的情况。今天,我将这些软件分类并简单解释了一下用法,希望对你有帮助~7款5款2款3款5款1款2款6款让我们开始今天的Jetbrains之旅吧~...

射手座轩木酱的代码天地~ 8万+

串口猎人V31:串口通信调试与分析利器

串口猎人软件的主界面是用户操作的起点,它通过直观的布局和丰富的功能模块,让使用者能够高效地进行串口通信的配置和数据监控。该界面被设计为几个主要的功能区,每个区域都有其特定的功能和用途。首先,位于主界面顶部的是菜单栏,提供文件管理、配置、视图以及帮助等常用选项。菜单栏下方是工具栏,集成了常用操作的快捷按钮,如“打开串口”、“保存数据”和“导出报告”等。在主界面的中心位置,是动态数据显示区域。这个区域根据不同的配置和选择,可以实时地显示接收到的串口数据,支持文本、十六进制和二进制格式的数据显示。

weixin_33419305的博客 1212

栈的创建和显示C语言程序

栈的创建和显示 switch(i) { case 0: return 1;break; case 1: InitStack(st); cout<<"perfect!!!\n"; break; case 2: cout<>x; Push(st,x); break; case 3: x=st.top; Pop(st,x); break; case 4: display(st); break; default:

2019-8-31-dotnet-如何调试某个文件是哪个代码创建

title author date CreateTime categories dotnet 如何调试某个文件是哪个代码创建 lindexi 2019-08-31 16:55:58 +0800 2019-03-12 09:59:51 +0800 dotnet 我发现了自己的软件,...

lindexi 310

Vivado 2018.3 安装步骤及 license 获取

本文的主要内容是介绍 Vivado 2018.3 版本的安装步骤及其 license 的获取与加载。

西岸贤 4万+

深入解析PARTNER-ETII ROM在线调试器:嵌入式开发调试利器

在嵌入式系统开发中,调试是保障软件质量和项目进度的关键环节。其核心原理在于通过特定工具与目标系统交互,实现对程序执行流程、内存状态和硬件行为的监控与控制。这项技术的价值在于能显著提升问题定位效率,缩短开发周期,尤其在处理实时性要求高、硬件交互复杂的场景时不可或缺。从应用场景看,无论是微控制器程序逻辑调试,还是多核处理器系统级验证,高效的调试手段都是工程师的必备技能。本文聚焦的PARTNER-ETII ROM在线调试器,正是这一领域的经典解决方案。它创新性地融合了ROM仿真器的易用性与在线仿真器的强大功能,通

既是过河之卒,惟有奋力向前。 900

RocketMQ源码分析之消息轨迹

文章目录前言一、消息轨迹二、消息轨迹源码分析1、producer端2、consumer端三、消息轨迹中存储的信息1.TraceContext2.TraceBean3.TraceType四、总结 前言   本篇文章将会从以下方面介绍消息轨迹:什么是消息轨迹?如何启用消息轨迹?示例demo、消息轨迹的源码分析和消息轨迹中存储的信息。最后会用一张图来总结消息轨迹的工作原理。 一、消息轨迹 1.什么是消息轨迹? 消息轨迹是用来跟踪记录消息发送、消息消费的轨迹。 2.如何启用消息轨迹? broker端 需要在b

不爱学习的小妞博客 1076

云计算学习——5G网络技术

华为eNSP网络设备模拟器的基础安装及简单使用

qq_42520799的博客 1444

i.MX31嵌入式Linux开发实战:从Bootloader到NFS调试与Flash固化

嵌入式Linux开发是构建智能设备的核心技术,其核心流程包括Bootloader引导、内核编译与根文件系统部署。理解Bootloader(如U-Boot、RedBoot)的工作原理,以及内核如何通过启动参数初始化硬件并挂载文件系统,是掌握嵌入式系统启动链的关键。这些技术为设备提供了稳定、可定制的软件基础,广泛应用于物联网终端、工业控制和消费电子等领域。在开发调试阶段,通过网络文件系统(NFS)挂载根文件系统可以极大提升效率,允许在宿主机上直接修改代码并即时在目标板上验证,无需反复烧写存储。本文以经典的飞思卡

weixin_32025789的博客 174

基于YOLOv11的工业零件表面缺陷检测系统:从原理到实现

工业质量控制是制造业的核心环节,表面缺陷检测作为其中重要组成部分,直接关系到产品质量和企业效益。本文详细介绍了一种基于YOLOv11深度学习算法的工业零件表面缺陷检测系统,包含完整的算法原理分析、数据集构建方法、模型训练策略以及用户界面设计。通过大量实验验证,该系统能够高效准确地检测零件表面的划痕、凹陷、锈蚀等多种缺陷,检测精度达到96.2%,满足工业实时检测需求。本文还提供了完整的代码实现和详细的技术文档,为相关领域的研究者和工程师提供参考。关键词:表面缺陷检测;YOLOv11;深度学习;工业视觉;

YOLO 567

第31篇-软件开发实战

Hermes Agent 软件开发实战指南 本指南介绍了如何将 Hermes Agent 深度整合到软件开发全流程中,从项目初始化到代码部署的完整闭环。 主要内容包括: 开发全流程:Hermes 贯穿需求分析、编码、调试、测试、审查、提交和部署各环节 项目初始化:技术选型、项目结构创建和文档生成 编码实战:自动生成 CRUD 代码和代码重构 系统化调试:采用4阶段方法论定位和修复问题 Git操作:自动生成规范的 commit message 和 PR 描述 代码审查:三级报告体系(严重/重要/建议)识别各类

liumingxiy的博客 533

拼多多Android面试题及参考答案

Android 系统采用分层架构设计,从底层到上层依次为Linux 内核层硬件抽象层(HAL)系统运行时库层应用框架层应用层,共五层。位置:Linux 内核层与系统运行时库层之间,是“硬件与系统的隔离层”。核心作用:屏蔽硬件差异,为上层提供统一的硬件访问接口,解决 Android 开源与硬件厂商闭源的矛盾,具体功能如下:硬件能力抽象:将硬件的具体实现(如不同厂商的摄像头芯片、音频芯片)封装为标准化接口(如Camera HALAudio HAL。

大模型大数据攻城狮的专栏 1282

【知识分享】CAN总线中终端网络的重要性

P沟道和N沟道晶体管的漏源通态电阻匹配良好时,形成的CANH和CANL信号匹配良好;如果驱动器的一半具有比另一半低得多的导通状态电阻,那么总线共模电压将从VCC/2的显性状态偏离,并回到VCC/2的隐性状态,这将导致每一次状态转换都会伴随着共模电压噪声,从而导致更高水平的传导和辐射能量发射。

一只豌豆象的博客 1543

软件调试实战(软件调试权威指南)

软件调试实战(软件调试权威指南) 本书样章免费读:http://www.china-pub.com/193196 定价 : ¥39.00 会员价 : ¥29.25(75折) 基本信息作者: (德)Thorsten Grotker Ulrich Holtmann Holger Keding Markus Wloka [作译者介绍] 译者: 赵俐[同译者作品] 丛书名: 图灵程序设计丛书 出...

yangzhiyong77 225

【Bug已解决】Codex Desktop 报错 Computer Use 插件不可用的解决方案

方案适用场景推荐指数让 Codex 自查修复首选的快速尝试方式⭐⭐⭐⭐⭐清理插件缓存重启明确怀疑是本地缓存损坏⭐⭐⭐⭐彻底卸载重装前两个方案无效时的进阶方案⭐⭐⭐⭐检查安全软件拦截企业电脑/装有严格安全软件的环境⭐⭐⭐确认账号权限范围排除功能本身未开放的可能性⭐⭐⭐Codex Desktop 报Computer Use 插件不可用的本质是客户端内置的插件资源在本地未被正确解包或注册到插件市场索引中,而不是真的缺少安装包。优先尝试让 Codex 自身检测并修复本地插件环境。

一键难忘的博客 5981

arm上backtrace的分析与实现原理

前言 我们往往在进行嵌入式开发的过程中,需要借助一些调试手段进行相关调试,比如在调试stm32的时候,可以在keil中利用jtag或者stlink进行硬件上的仿真与调试,一些高频的arm芯片也会使用jtag之类的硬件调试工具,还有trace32等等,但是这些往往需要借助一些硬件工具进行分析。当然,我们可以进行软件层面的分析。定位问题的方式通常有以下三点: 1.通过串口打印信息进行业务逻辑的梳理,结合代码设计进行分析 2.在程序死机的时候,输出的函数调用栈关系进行分析,结合符号文件进行跟踪定位 3.在

chenzhjlf的专栏 1499

2026年职业院校技能大赛中职移动应用与开发—数字生活APP原型设计参考答案(含素材)

本模块以产品原型为目标,考查参赛选手熟练收集、分析和归纳客户需求,清晰梳理业务流程,熟练使用UI设计软件进行产品UI/UE设计,掌握正确的UI配色方案,设计出符合业务逻辑的人体工学移动App 原型优秀作品。

我是网络安全兼技能大赛工程师,专注网络安全技术学习与技能大赛实战!持续分享最新的技术文章,帮你少走弯路,一起在技术赛道上进步~ 568

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

上一篇: 内存分配函数
下一篇: 软件调试笔记32 - 栈和函数调用: CALL和RET指令
imJaron
博客等级 码龄11年 121粉丝 286原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值