J-Scope是Segger推出的一款免费软件,用于MCU运行时,实时显示数据波形,可以以类似示波器的方式显示多个变量的值。本文提供简单的例子演示如何基于先楫半导体的芯片新建 J-scope工程并显示运行数据。
以下内容介绍分为四个模块:工作模式、软硬件版本、HSS模式工程创建和RTT模式工程创建。
一、工作模式
【资料图】
J-Scope分为HSS和RTT两种模式:
1. HSS(High-Speed-Sampling)模式:jlink周期性的读取数据,将数据上传至j-scope显示。
优点:
1)简单,代码无需做任何更改
2)通过elf文件确定变量地址
缺点:
1)相比RTT模式数据传输速度更慢
2)异步采样,具有相当的非实时性
2. RTT(Real-Time-Transfer)模式:实时传输模式,代码主动上报变量数值至j-scope显示。
优点:
1)比HSS模式速度更高,最大上传速度可达2MB/s
2)数据上传与MCU内程序运行是同步的,具有实时性
3)要监控的变量可自动检索,无需指定地址或提供elf文件
4)数据可加时间戳
缺点:
1)需要写代码,具体的,需要加载RTT组件,并在代码中手动上传要显示的数据
2)占用一定的内存(RTT Buffer)
二、软硬件版本
硬件J-Link:V10版本及以上(支持risc-v内核),推荐使用J-Link V11。
软件J-Scope:J-Link Software and Documentation pack V7.88f及以上,一般使用最新版本J-Link驱动即可。安装完成后在windows内搜索即可找到J-Scope GUI工具。
三、HSS模式工程创建
1.代码添加
打开SDK1.1.0内hello_world工程,添加如下代码:
float my_pi= 3.141592654f;
float my_two_pi = 6.283185307f;
typedef struct{
float ts;
float omega;
float theta;
float sinval;
float cosval;
}jscope_debug_t;
jscope_debug_t jscope_debug = {
.ts = 0.001f,
.omega = 2.0f * 3.141592654f * 10.0f,
.theta = 0.0f,
.sinval = 0.0f,
.cosval = 0.0f,
};
void jscope_debug_run(jscope_debug_t *p)
{
p->theta += p->omega * 0.001f;
if(p->theta > my_pi)
p->theta = p->theta - my_two_pi;
p->sinval = sinf(p->theta);
p->cosval = cosf(p->theta);
return;
}
以上代码定义了jscope_debug_t结构体,添加了一个jscope_debug_t型变量,并在jscope_debug_run函数内对变量值做修改。
添加如下代码,设计一个1ms定时器中断,在中断函数内执行jscope_debug_run:
void gptmr_init(void)
{
gptmr_channel_config_t config;
gptmr_channel_get_default_config(GPTMR, &config);
config.reload= 100*1000;
gptmr_enable_irq(GPTMR, GPTMR_CH_RLD_IRQ_MASK(GPTMR_CH));
gptmr_channel_config(GPTMR, GPTMR_CH, &config, false);
gptmr_channel_reset_count(GPTMR, GPTMR_CH);
gptmr_start_counter(GPTMR, GPTMR_CH);
intc_m_enable_irq_with_priority(GPTMR_IRQ, 1);
}
void isr_gptmr(void)
{
volatile uint32_t s = GPTMR->SR;
GPTMR->SR = s;
if (s & GPTMR_CH_RLD_STAT_MASK(GPTMR_CH)) {
//this is a 1ms isr_handler
jscope_debug_run(&jscope_debug);
}
}
SDK_DECLARE_EXT_ISR_M(GPTMR_IRQ, isr_gptmr)
注意:需要将监控的变量放在noncachable内存区,或者直接关闭L1缓存(l1c_dc_disable()),否则数据一直在l1缓存内,J-Link读不到数据。
2.GUI操作
打开J-Scope,新建工程,如下所示:
在弹出的界面配置如下:
1、本文作者使用HPM6200evk,因此设备选择HPM6280xPAx。注意,如果找不到对应的芯片型号,考虑升级J-Link驱动包。
2、Sampling Source选择HSS模式。
3、Sampling Rate选择1Khz,即每1000us采集一次数据。
4、指定elf文件。HSS模式会解析elf文件确定变量地址。
选择要监控的数据,在变量后面的方框内打勾即可。
保证芯片内程序正在运行,点击图中开始采样按钮,即可开始采集波形并显示。移动光标可以查看某一时刻采集的3个数据的值。
Sampling后有两个功能按钮,前一个开始/暂停采样,后一个停止采样。Target后有两个功能按钮,前一个开始/暂停芯片执行,后一个复位芯片。
界面右上角放大缩小符号以及其后的下拉框,可控制时间轴缩放。
界面下方watch window内,可显示变量名、变量地址、变量数值(光标处),最大值、最小值、滑动平均值。修改 Y Resolution 与 Y Offset,可以对每一根曲线的Y轴缩放与偏移进行设置。
四、RTT模式工程创建
1. 代码添加
打开SDK1.1.0内hello_world工程的cmakelists,做如下修改:
添加如下代码:
float my_pi = 3.141592654f;
float my_two_pi = 6.283185307f;
typedef struct{
float ts;
float omega;
float theta;
float sinval;
float cosval;
}jscope_debug_t;
jscope_debug_t jscope_debug ={
.ts = 0.001f,
.omega = 2.0f * 3.141592654f * 10.0f,
.theta = 0.0f,
.sinval = 0.0f,
.cosval = 0.0f,
};
void jscope_debug_run(jscope_debug_t *p)
{
p->theta += p->omega * 0.001f;
if(p->theta > my_pi)
p->theta = p->theta - my_two_pi;
p->sinval = sinf(p->theta);
p->cosval = cosf(p->theta);
return;
}
void isr_gptmr(void)
{
volatile uint32_t s = GPTMR->SR;
GPTMR->SR = s;
if (s & GPTMR_CH_RLD_STAT_MASK(GPTMR_CH)) {
//this is a 10ms isr_handler,add your code here
jscope_debug_run(&jscope_debug);
}
}
SDK_DECLARE_EXT_ISR_M(GPTMR_IRQ, isr_gptmr)
void gptmr_init(void)
{
gptmr_channel_config_t config;
gptmr_channel_get_default_config(GPTMR, &config);
config.reload = 100*100;
gptmr_enable_irq(GPTMR, GPTMR_CH_RLD_IRQ_MASK(GPTMR_CH));
gptmr_channel_config(GPTMR, GPTMR_CH, &config, false);
gptmr_channel_reset_count(GPTMR, GPTMR_CH);
gptmr_start_counter(GPTMR, GPTMR_CH);
intc_m_enable_irq_with_priority(GPTMR_IRQ, 1);
}
main函数如下:
int main(void)
{
int u;
char JS_RTT_UpBuffer[4096]; // J-Scope RTT Buffer
int JS_RTT_Channel = 1; // J-Scope RTT Channel
int i;
board_init();
board_init_led_pins();
gptmr_init();
l1c_dc_disable();
board_timer_create(LED_FLASH_PERIOD_IN_MS, board_led_toggle);
printf("helloworld\n");
SEGGER_RTT_ConfigUpBuffer(JS_RTT_Channel, "JScope_f4f4f4f4f4", &JS_RTT_UpBuffer[0], sizeof(JS_RTT_UpBuffer),SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL);
while(1)
{
SEGGER_RTT_Write(JS_RTT_Channel,&jscope_debug, sizeof(jscope_debug));
}
return 0;
}
上述代码首先配置了RTT组件的upbuffer1,将其命名为"JScope_f4f4f4f4f4"(命名规则下文描述),配置其占用的内存区为JS_RTT_UpBuffer,数组大小为4096个字节,以及写函数的调用策略为当内存区满时以阻塞模式写入(请参考RTT wiki百科)。然后在while循环内,不停的调用SEGGER_RTT_Write函数上传数据到J-Scope进行显示。RTT模式uploadbuffer命名规则:
通道名称以“JScope_”开头,后面跟解析RTT内存数据需要的数据个数、数据类型与每个数据占用的字节数。例如浮点数一定占用4个字节,而整形可以占用1、2、4个字节。
2.GUI操作
打开J-Scope,新建工程,如下所示:
在弹出的界面配置如下:
选择设备,芯片型号。选择RTT模式。如果需要更高的传输速率,可以增加JTAG速度,比如12000khz或20000khz。进入GUI界面,可以看到我们没有提供任何的elf文件,J-Scope自动识别出上报的结构体有5个float型数据。这是RTT组件自动在内存中搜索,找到了我们定义的RTT buffer的结果。由于没有提供elf,所以watch window内无变量名信息,也无地址信息。
采样可以观察到,波形明显有锯齿了,说明RTT上传的速度高,同一个数据上传了多次。
trigger功能可以用来达成条件触发采样,如图所示,设置sin的值大于0.5时触发采样,则波形从sin=0.5358时开始采样。
小 结
本文首先介绍了基于HPM6000系列芯片如何使用J-Scope调试。总体而言J-Scope是一款相当易用的工具,使用时只需注意变量放在非l1缓存区即可。读者可自行尝试,提高调试效率。
关键词:
(责任编辑:黄俊飞)推荐内容
- 如何用先楫芯片构建J-scope工程及运行
- 中远海运重工“远洋五”浮船坞升级改造项
- 招商证券:A股内外部拐点初现,上一次是2
- 中胤时尚:连续3日融资净偿还累计450.43
- 简述资产负债表的基本格式 简述资产负债
- 刷机是什么意思呀 刷机是什么意思
- 蚂蚁集团整改完成:回购股份 新估值5671亿
- 天气预报
- 姜四清主持召开朔州市委专题会议
- 集束弹药引爆或波及平民 美副防长:比起
- NBA2KOL:沙奎尔-奥尼尔(经典版)球星测评
- 蚂蚁集团将召开股东大会以批准回购不超7.
- AC米兰购买马竞莫拉塔,遇到阻力,被建议
- 致态推出TiPlus5000固态硬盘ZTA10666固件
- 腾信退:公司股票7月10日摘牌
- 北京石景山游乐园开启夏日狂欢
- 长生殿作者及朝代(长生殿作者)
- 界面二次开发
- 留学生每月补助3万?济南大学回应:图片
- 创新探索社区康复服务模式,普陀这里为抑
- 京剧丑角脸谱简笔画(京剧丑角脸介绍)
- 高温橙色预警!6省区局地可达40℃
- 湖北五峰县山体滑坡致9人失联,省长赶赴
- ps复制新建图层快捷键(PS中新建图层的快
- 熟视无睹的近义词 熟视无睹
- 冰雪沐“冰城” 冰魂永传承
- 蔡昉:户籍制度改革可以把目前已进城的1.
- 成熟男人的最爱揭秘46岁热衷追求的东西
- 詹俊:姆巴佩与巴黎感情破灭,但枪手红军
- 上半年郑商所累计成交量全国第一
- 掘金创新药 | 华东医药利拉鲁肽获批减
- iPhone15Pro系列将采用深蓝色
- 永贵电器:连接器产品在工业机器人上有储
- 拜仁运作11人离队 马内在列 3大明星可
- VideoProc Converter 4K(5.7) for mac视频转换工具
- 台湾劳动党发表声明 批评赖清德颠倒黑白
- 原神3.8哐哐当当雀雀球挑战怎么玩
- 北京出台职业技能培训机构预收资金监管细
- 杭叉集团(603298):7月7日北向资金增持
- 2023年07月08日(15至19公斤)仔猪价格行情走势
- 李村商圈啤酒嘉年华今日开街,交警发布提
- 机械故障诊断的意义(机械故障诊断)
- 优化服务深化改革 提高产品竞争力
- 学习体会 | 以实干实绩守护百姓健康
- 招商银行:王小青副行长任职资格已获得核
- 听,这就是防汛救灾一线的声音!
- 武冈市民政局开展儿童关爱志愿服务活动
- 四川发布山洪灾害蓝色预警,涉及25个县(
- 豫园股份:控股股东复星高科技及一致行动
- 安徽蚌埠蚌山区主动担当作为暖心护航文化
- “商汤日日新SenseNova”大模型体系迭代
- 中金岭南所属韶关冶炼厂高纯铟制备技术取
- 7月7日中泰股份发生3笔大宗交易 成交金
- 保障“菜篮子”产品稳定安全供给
- 美国就业机会降至980万个,但仍然很高
- 第二届中国·邵武是个好地方严羽诗歌会将
- 售价19.98万元起 福特领裕黑曜倾橙版上市
- 金融服务提质 企业发展加速
- 川浙“互宠” 浙江494家景区将为四川游
- 豪江智能办公产品新建项目开工 总投资约
- 京剧丑角脸谱简笔画(京剧丑角脸介绍)
- 高温橙色预警!6省区局地可达40℃
- 湖北五峰县山体滑坡致9人失联,省长赶赴
- ps复制新建图层快捷键(PS中新建图层的快
- 熟视无睹的近义词 熟视无睹
- 冰雪沐“冰城” 冰魂永传承
- 蔡昉:户籍制度改革可以把目前已进城的1.
- 成熟男人的最爱揭秘46岁热衷追求的东西
- 詹俊:姆巴佩与巴黎感情破灭,但枪手红军
- 上半年郑商所累计成交量全国第一
- 掘金创新药 | 华东医药利拉鲁肽获批减
- iPhone15Pro系列将采用深蓝色
- 永贵电器:连接器产品在工业机器人上有储
- 拜仁运作11人离队 马内在列 3大明星可
- VideoProc Converter 4K(5.7) for mac视频转换工具
- 台湾劳动党发表声明 批评赖清德颠倒黑白
- 原神3.8哐哐当当雀雀球挑战怎么玩
- 北京出台职业技能培训机构预收资金监管细
- 杭叉集团(603298):7月7日北向资金增持
- 2023年07月08日(15至19公斤)仔猪价格行情走势
- 李村商圈啤酒嘉年华今日开街,交警发布提
- 机械故障诊断的意义(机械故障诊断)
- 优化服务深化改革 提高产品竞争力
- 学习体会 | 以实干实绩守护百姓健康
- 招商银行:王小青副行长任职资格已获得核
- 听,这就是防汛救灾一线的声音!
- 武冈市民政局开展儿童关爱志愿服务活动
- 四川发布山洪灾害蓝色预警,涉及25个县(
- 豫园股份:控股股东复星高科技及一致行动
- 安徽蚌埠蚌山区主动担当作为暖心护航文化
- “商汤日日新SenseNova”大模型体系迭代
- 中金岭南所属韶关冶炼厂高纯铟制备技术取
- 7月7日中泰股份发生3笔大宗交易 成交金
- 保障“菜篮子”产品稳定安全供给
- 美国就业机会降至980万个,但仍然很高
- 第二届中国·邵武是个好地方严羽诗歌会将
- 售价19.98万元起 福特领裕黑曜倾橙版上市
- 金融服务提质 企业发展加速
- 川浙“互宠” 浙江494家景区将为四川游
- 豪江智能办公产品新建项目开工 总投资约
- 2023铜川职业技术学院艺术类学费多少钱一
- 分析师:苹果iPhone 16 Pro采用固态按
- AI帮填高考志愿,靠谱吗?
- 君实生物:7月6日融资买入731.41万元,融
- *ST柏龙(002776):红塔证券拟减持不超2%股份
- 《2022全球人工智能创新指数报告》发布
- 【诗词里的传统节气】小暑节气 送你六首
- 俄公布搜查普里戈任住所和办公室画面
- 7月6日基金净值:鹏华优选成长混合A最新
- “家门口”快修站,换灯管10块钱——南京
- 曼恩斯特(301325):7月6日北向资金减持
- 厦门港务(000905):7月6日北向资金减持
- 河南机电职业技术学院代码 河南机电职业
- 感觉自己抑郁了?抑郁自测量表来了
- 平坂读原作轻小说《怪人的沙拉碗》宣布TV
- 6G:建议书落地,路线图清晰
- 慈禧太后第一次乘坐火车,提出了三个让人
- 坑人的常吃菜有5种甲醛多 不建议三餐都吃
- 市场监管总局部署化工企业特种设备安全隐
- 商务部:1-5月服务贸易总体保持增长态势