1199|1

659

帖子

1

TA的资源

纯净的硅(中级)

楼主
 

【上海航芯 ACM32F070开发板+触控功能评估板】—— 测试技巧和思考笔记 [复制链接]

 

例程测试 大部分例程执行过程都是:

  1. Reset_Handler

  2. System_Core_Config()

  3. __main(), (编译器C运行时库的堆、栈、有初始值变量的初始化等设置)

  4. main()

  5. System_Init()

  6. Uart_Init()

  7. APP_XXX_Test()

前面几项都基本相同,不同的例程测试代码都在APP_XXX_Test函数里,位于App.c源文件中。

 

 

 

APP_XXX_Test简化多次编译调试的技巧

ACM的例程ModulesDemo中,很多程序都是多个功能测试函数集合,成为一个函数,将不同的功能测试设置一个 fe_Mode ,然后在main函数里的APP_XXX_Test(fe_Mode),例如:

/* GPIO_OUTPUT、GPIO_INT、GPIO_PC13、LED_BLINK */
APP_GPIO_Test(LED_BLINK);

对于每次测试,都需要将main函数中的这个值修改,然后编译、下载、调试,比较耗时。

经过多次探索,发现可以使用两种方法,即可在不改变代码的条件下,一次调试中完成多项功能的测试。

  • 修改寄存器R0
    1. 在APP_XXX_Test函数最前面打上debug断点。

    2. 调试界面下,点击run后,停留在刚刚设置的断点处。

    3. 观察对应的反汇编代码,发现 fe_Mode 传递参数是存储在寄存器R0里,然后比较R0与相应的emum_Mode_t ,从而执行不同的功能测试代码。

    4. 因此,修改寄存器R0,就可以执行对应的测试,无须在main函数中修改 fe_Mode 再重新编译下载调试这种费时操作。

  • 修改寄存器PC
    1. 在APP_XXX_Test函数最前面打上debug断点。

    2. 调试界面下,点击run后,停留在刚刚设置的断点处。

    3. 选择想要跳转执行的代码,利用Keil调试界面的“Change Program Counter”,可以直接将PC指向当前行。

中断ISR与主函数main之间的一个问题思考

如图,参考GPIO例程中的GPIO_INT功能测试代码,考虑以下场景:

如果两个中断来的比较接近,在main函数进入到,还未来得及设置中断标志变量 gu32_GPIOIRQ_Flag 为false,下一个中断又立刻到来,此时进入ISR中断服务例程,将 gu32_GPIOIRQ_Flag 设置为true,然后退出ISR后恢复执行main,此时main才将 gu32_GPIOIRQ_Flag 设置为false,将刚才的中断标志覆盖,导致丢失一次中断。(因此要求中断标志位的设置必须尽快完成?那么对于高频次的外部信号,该如何设计呢?)

 RTC调试无复位的影响

RTC例程中,没有对RTC模块进行复位操作,调试复位以及nRST复位,都不能复位RTC,在多次调试过程中,前一次的调试对RTC的设置会影响下一次调试,需要断电后再重新调试,否则出错。

最新回复

修改寄存器PC的方法和修改寄存器R0 都是需要修改寄存器的,区别不是太大   详情 回复 发表于 2022-10-24 08:03
点赞 关注
 
 

回复
举报

6802

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 

修改寄存器PC的方法和修改寄存器R0

都是需要修改寄存器的,区别不是太大

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表