【DSP】无法在线仿真无法进入main()函数

news2025/1/13 7:37:46

DSP无法在线仿真无法进入main()函数

1.问题描述

​ 接手前人的DSP代码,硬件平台是DSP C6701,软件IDE是CCS 12.3.0。仿真器版本是XDS 560V2。

​ 在进行在线仿真时,经常出现“伪在线”的情况。简单来说,正常的在线过程:在CCS软件中点击debug按钮,程序加载进硬件后,会进入暂停状态,此时点击继续运行按钮,程序开始运行,接收遥控指令等功能正常。而“伪在线”地情况,点击debug按钮,程序加载进硬件进入暂停状态,此时点击继续运行按钮,程序看似正常运行,但不对遥控进行响应,此时暂停程序,会显示停留在中断函数的某一句语句上,重复地进行“暂停-启动”操作,程序每次都停止在相同的语句。

​ 在第一版代码中,也就是前人的代码,该问题偶尔出现,出现该问题后需要反复重启产品、仿真器、CCS软件等,运气好的话几次就能在线成功。

​ 在对第一版代码进行修改后,本文使用第二版代码进行在线,开始每次都出现该问题,始终无法在线成功。
在这里插入图片描述

​ 程序的大概结构如下:


class ReceiveSend
{
 private:
    //一些私有函数和私有变量
    
 public:
    fun_process();
    fun_isr_process();
}

ReceiveSend * ptr_tmp;
int main()
{
    //中断定时器设置
    _fun_timer00_set();
    //中断设置
    _fun_isr_init();
    //DSP EMIF口初始话
    _fun_emif_init();
    //new对象
    ptr_tmp = new ReceiveSend;
    while(1)
    {
        //需要在main()中的对时间要求不高的功能
        //包含接收遥控指令,发送遥测数据
        ptr_tmp -> fun_processs();
    }
    return 0;
}

interrupt void c_int14()
{
    //在中断中运行的,对事件要求比较高的功能
    ptr_tmp -> fun_isr_process();
}


2.问题定位

​ 代码中的fun_processs()函数实现了接收主机的遥控指令,向主机发送遥测数据的功能,因此在debug的过程中,将主机能否接收到遥测数据作为程序是否正常运行的判别标准。如果主机可以接收到遥测数据,则认为程序正常运行。

​ (1)最开始怀疑是第二版代码添加的功能太多了,造成了无法在线运行的问题,因此将许多无效的变量和函数删除,将Memory的分配占比调整地比第一版的分配占比还低,但是很可惜,“伪在线”的问题还是没有解决。
在这里插入图片描述

​ (2)接下来将中断函数c_int14fun_isr_process()函数中的内容全部注释,也就是保留中断函数,但是中断函数中不执行任何功能。这回程序fun_process()中的遥控遥测收发是正常的,主机端接收到了遥测。

​ 于是怀疑是fun_isr_process()中的功能太多了,在中断事件内无法运行完。程序此时是具备遥控遥测收发功能的,fun_isr_process()函数中没有任何功能,本文使用#if 0的办法,去增加fun_isr_process()中的功能模块。如果增加到,比如说C模块时,遥控遥测收发不正常了,那么问题可能出现在C模块的代码中。

​ 试验的结果比较奇怪:
第一次试验,逐步地增加模块数量,直到剩余1个功能模块没有启用,程序正常运行,将最后1个模块也启用,程序不能正常运行;
第二次试验,产品断电重启,将代码恢复到可以正常启用的情况,也就是不启用最后1个模块的状态,程序不能正常运行;
第三次试验,产品断电重启,重复第一次试验的步骤,逐步增加模块数量直至最后1个功能模块,程序正常运行。
第四次试验,产品断点重启,重复第一次试验的步骤,逐步增加功能模块,直到启用最后1个功能模块,此时程序不能正常运行,此时不断电,将代码中的最后1个模块禁用, 程序还是不能正常运行。

​ 总结来说,代码完全相同的情况下,程序能否正常运行是个玄学问题。

​ (3)

​ 重复(2)中的第四次试验,到达“最后1个模块禁用+程序不能正常运行”的状态,在fun_process()函数中打上断点,断点位于一个必定会执行的函数后,结果程序没有停止在断点的位置。

​ 本文怀疑fun_process()函数根本就没有运行,没有运行自然就没有遥控遥测收发功能了。

3.问题解决

​ 以“DSP程序不进入main()函数”进行搜索,搜索到了一个可能的原因:

求助:DSP28034程序跑不到main是什么原因 (amobbs.com 阿莫电子技术论坛)
在这里插入图片描述

​ 本文的第二版代码确实是向class中添加了很多变量和函数。

​ 于是调整了一下main()函数中的代码的顺序,将new ReceiveSend的操作放到程序的最开始,也就是中断函数设置之前,问题解决,可以正常地在线调试了…

int main()
{
    //放置在最开始
    ptr_tmp = new ReceiveSend;
    //中断定时器设置
    _fun_timer00_set();
    //中断设置
    _fun_isr_init();
    //DSP EMIF口初始话
    _fun_emif_init();
    //new对象
    //ptr_tmp = new ReceiveSend;

​ 本文猜测是中断设置完成后,中断函数就开始运行了,中断函数中的fun_isr_process()函数用到了class ReceiveSend中的变量和函数,而这个时候还还在new的过程中,还没有初始化完成,就产生冲突,造成程序无法正确运行了。当然这些都是猜测,不管怎么说,虽然不了解原理,但是问题得到了解决,没有耽误开发。

4.遗留问题

​ 遗留的问题在于,为什么“伪在线”的问题只出现在线仿真阶段,如果将程序的.bin文件烧写进Flash,由FPGA加载程序,就不出现该问题。也许在线加载和从Flash启动程序存在区别?

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

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

相关文章

使用Python的Elasticsearch客户端 elasticsearch-py 来完成删除现有索引、重新创建索引并测试分词的示例代码

以下是一个使用Python的Elasticsearch客户端 elasticsearch-py 来完成删除现有索引、重新创建索引并测试分词的示例代码 一、安装依赖 pip install elasticsearch二、运行效果 三、程序代码 from elasticsearch import Elasticsearch, NotFoundError# 连接到Elasticsearch es…

基本滤波器响应(低通+高通+带通+带阻)+滤波器的响应特性(阻尼系数+截止频率下降率)

2024-9-4,星期三,20:40,天气:晴,心情:多云。又是上班的一天,至于心情为什么多云,是因为女朋友换季感冒了,我有上班回不去,难受,赶紧到周五吧&…

多模态:DetCLIPv3解析

文章目录 前言一、介绍二、方法2. Open vocabulary detector2.1 encoder2.2 decoder 3. Object captioner 三、数据工程1. Auto-annotation data pipeline 四、训练策略五、实验总结 前言 目前多模态目标检测逐渐成为检测领域的主要发力方向,从最初的检测大模型gro…

2024年最新版Ajax+Axios 学习【包含原理、Promise、报文、接口等...】

基础知识 AJAX概念 AJAX概念:是浏览器与服务器进行数据通信的技术。 认识URL 定义:统一资源定位符,简称网址,用于访问网络上的资源。 组成: http协议:超文本传输协议,规定浏览器和服务器之…

C++系统教程001

1. 安装 Dev-C编程软件 2. 熟悉 Dev-C的界面 3. cout 输出语句的使用 4. 学会 C程序的编译运 一、认识编译器 我们平时所说的程序,一般指双击后就可以直接运行的程序,这样的程序又称为可执行程序。Windows系统下,可执行程序的后缀一般为.ex…

【C++】手动实现栈的封装

完成了以下功能的封装 目录 代码实现&#xff1a; 输出结果如下&#xff1a; 代码实现&#xff1a; #include <iostream> #include <cstring>using namespace std;class Static { private:int *arr; //动态分配栈int top; //指向栈顶元素i…

Docker中的容器内部无法使用vi命令怎么办?

不知道你是否遇到过,在修改容器内部的配置的时候,有时候会提示vi命令不可用。尝试去安装vi插件,好像也不是很容易,有什么办法可以帮助我们修改这个配置文件呢? 解决办法 这时候,我们就需要用到docker cp 命令了,它可以帮助我们把容器内部的文件复制到宿主机上,也可以将…

深入探究 RocketMQ:分布式消息中间件的卓越之选》

《深入探究 RocketMQ&#xff1a;分布式消息中间件的卓越之选》 一、引言 在当今复杂的网络通讯环境中&#xff0c;传统的 Http 请求同步方式存在诸多弊端。当客户端与服务器进行通讯时&#xff0c;客户端必须等待服务端完成处理后返回结果才能继续执行&#xff0c;这种同步调…

万字详解 Redis

1 Redis 是什么 1.1 定义 Redis是一种开源的、基于内存的数据结构存储系统&#xff0c;可以用作数据库、缓存、消息队列等。它支持多种数据结构&#xff0c;如字符串&#xff08;String&#xff09;、哈希&#xff08;Hash&#xff09;、列表&#xff08;List&#xff09;、集…

黑马点评2——商户查询缓存(P37店铺类型查询业务添加缓存练习题答案)redis缓存、更新、穿透、雪崩、击穿、工具封装

文章目录 什么是缓存&#xff1f;添加Redis缓存店铺类型查询业务添加缓存练习题 缓存更新策略给查询商铺的缓存添加超时剔除和主动更新的策略 缓存穿透缓存空对象布隆过滤 缓存雪崩解决方案 缓存击穿解决方案基于互斥锁方式解决缓存击穿问题基于逻辑过期的方式解决缓存击穿问题…

DrissionPage设置启动浏览器为edge

1.查看浏览器启动路径 在浏览器地址栏输入下面地址&#xff0c;拿到可执行文件的路径 。 edge://version/ 2.替换路径 打开DrissionPage._configs. chromium_options.py文件&#xff0c;找到def browser_path(self)这个函数&#xff0c;将返回内容替换为edge的启动路径&#x…

xacro->urdf->pdf

在ROS 2系统中&#xff0c;要将xacro文件转换为PDF文件&#xff0c;可以按照以下步骤操作&#xff1a; 步骤1&#xff1a;将Xacro文件转换为URDF文件 首先&#xff0c;需要将xacro文件转换为urdf文件。可以使用ROS 2提供的xacro工具来完成这个转换。 ros2 run xacro xacro p…

6.1.数据结构-c/c++模拟实现堆上篇(向下,上调整算法,建堆,增删数据)

目录 一.堆(Heap)的基本介绍 二.堆的常用操作&#xff08;以小根堆为例&#xff09; 三.实现代码 3.1 堆结构定义 3.2 向下调整算法* 3.3 初始化堆* 3.4 销毁堆 3.4 向上调整算法* 3.5 插入数据 3.6 删除数据 3.7 返回堆顶数据 四.下篇内容 1.堆排序 2.TopK问题 一…

案例-KVM+GFS分布式存储系统构建KVM高可用(虚拟化实战)

NFS GlusterFS 基于共享存储 采用GFS做共享存储&#xff1b; 实验环境&#xff1a;101 102 103 104 做gfs集群&#xff1b;201 202做虚拟机&#xff1b; 同步一下会话&#xff1b; 为了方便使用主机名进行通信&#xff0c;修改hosts文件&#xff1b; 为了使用GlusterFS的仓库…

国内独家首发 | OpenCSG开源中文版fineweb edu数据集

01 背景 近年来&#xff0c;人工智能&#xff08;AI&#xff09;技术&#xff0c;特别是自然语言处理&#xff08;NLP&#xff09;的飞速发展深刻影响着各个行业。从智能客服到内容生成&#xff0c;从语音识别到翻译工具&#xff0c;NLP的应用已经无处不在。在这一领域中&…

[线程]JUC中常见的类 及 集合类在多线程下的线程安全问题

文章目录 一. JUC中常见的类1. Callable接口2. ReentrantLock3. Semaphore 信号量4. CountDownLatch 二. 集合类在多线程下的线程安全问题多线程下使用ArrayList多线程下使用哈希表(重要) 下面介绍的内容是面试中常考, 但是实际开发中用不到的知识 一. JUC中常见的类 JUC : ja…

『功能项目』主角身旁召唤/隐藏坐骑【20】

本章项目成果展示 我们打开上一篇19坐骑UI搭建及脚本控制显/隐的项目&#xff0c; 本章要做的事情是在坐骑UI界面点击召唤及隐藏坐骑的功能 首先在外包中拖拽一个坐骑熊的预制体 完全解压缩 重命名为MountBear 在资源文件夹Resources下的/预制体文件夹Prefabs下新建坐骑文件夹…

海外合规|新加坡网络安全认证计划简介(三)-Cyber Trust

一、 认证简介&#xff1a; Cyber Trust标志是针对数字化业务运营更为广泛的组织的网络安全认证。该标志针对的是规模较大或数字化程度较高的组织&#xff0c;因为这些组织可能具有更高的风险水平&#xff0c;需要他们投资专业知识和资源来管理和保护其 IT 基础设施和系统。Cy…

新质生产力人工智能+系列5-智能业务识别研究(含任务、数据、算力资源)

在新质生产力高质量发展的要求下&#xff0c;中国移动在“人工智能”和 “数据要素X”方面不断发力&#xff0c;持续发布高质量电信数据集。围绕网元智能、运维智能、服务智能三大方向建设&#xff0c;涵盖无线信道、基站、云网、核心网、哑资源等多领域&#xff0c;支持感知、…

护工系统|护工陪护系统|护工小程序

在医疗服务行业日新月异的今天&#xff0c;陪护机构正乘着数字化转型的东风&#xff0c;扬帆远航&#xff0c;其中&#xff0c;护工系统的引入无疑为其插上了一对强劲的翅膀&#xff0c;引领着行业向更加高效、精细化的方向迈进。这一系统不仅是对传统陪护模式的深刻重塑&#…