产品概述

  • 如何查看寄存器值

    在调试的过程中,时常需要查看寄存器值,以确认配置是否正常写入或者手动修改某些位。

    支持的交互方式列举如下。

     无论是哪种交互方式,都要注意
    • 内容只有在debug暂停时会更新
    • 寄存器对应位的读写属性,如只写位通常只能读到 "0“

    1、通过svc文件。将芯片对应的svc文件加入到工程(部分驱动库已经包含在chip目录下)。

    ● 打开Peripherals Pane的视图

    ● 进入调试界面,选择要查看的外设。toggle点击可以取消查看。

    ● 调试界面可以看到对应外设的寄存器内容


    2、通过Frame Pane中的Memory tab。如果您手中暂时没有svc文件,也可以通过查看memory区内容获得寄存器状态。

    ● 确保Frame Pane处于打开状态。

    ● 对照芯片使用手册,查询外设基地址。

    ● 定位Memory地址。如下图。寄存器地址为基址+Offset值。

  • 如何在CDK环境下加入math库

    如果代码要用math库中的函数,需要做

    1、文件中 #include

    2、修改link tab的内容。将连接类型改成whole-archive,并在link flags中增加 -lm,如下图所示:


  • CDK怎么恢复默认窗口显示配置

    如果不小心关闭了一些显示窗口,比如调试时的汇编窗口、Frame Info窗口、Debugger窗口……,找不到恢复地方可以使用一键恢复默认显示。

    1.点击菜单栏中的“Windows”,再点击“Reset View to Defaults”

  • 如何把变量或函数放到指定位置

    如何实现变量的绝对定位


    CDK编译环境使用了GNU C Complier,简称GCC。GCC使用ld脚本对代码对象进行链接,将多个输入文件整合成一个输出文件。

    在一些特殊的场合,我们需要对代码中的一些内容实现精确的定位。

    这里我们分两个方面来介绍,分别是变量的绝对定位和函数(代码段)的绝对定位。

  • 变量的绝对定位

    假设要实现将wData[] 放到程序存储区 0x9000的位置。需要做以下两个操作

    1. 首先在代码文件中,将变量归入某个section,这个例子里是FlashData段。

    __attribute__((section(".FlashData"))) const uint32_t wData[] = {0x1, 0x2}; //在这种绝对定位的情况下,关键字 const 不是必须的。

    < /FONT >

    < P >   2.  其次,要对ld文件进行修改。

    增加以下内容,将FlashData段起始地址定位在0x9000。

    .FlashData 0x9000:
    {
    . = ALIGN(0x4) ;
    *(.FlashData)
    *(.FlashData.*)
    } > ROM

    再重新编译,就可以在map文件上看到:

  • 函数加载到RAM区

    有时候,会希望有一些代码可以快速取址并运行。其中一个实现的方法是把函数定位到RAM区。

    假设要实现将function() 放到RAM。需要做以下两个操作:

    1. 首先在代码文件中,将函数归入某个section,这个例子里是codeinram段。

    __attribute__((section(".codeinram"))) void function1(void);

    2.  其次,要对ld文件进行修改。

  • 库程序编译报错

    1、如果拿到的库程序第一次编译报错,错误提示如下:



    这是因为库发布时带了一些编译选项,点击CDK“清除”快捷按钮清除一下工程,再重新编译即可。

  • 基本连接方法

    1、芯片放在烧录器上烧写时需关注芯片放置的位置,有没有放反等等。

    2、芯片在板烧写时,需要注意

    ● 烧写需要用到的5个信号(VDD,VSS,SWD,SWCLK,RST)有没有都连到烧写器上

    ● VDD和VSS之间的电容有没有超过100uF,超过的话可能需要在烧录器这边的VDD和VSS之间并个小电容(如500ohm)来对板子上的大电容进行放电

    ● SWD,SWCLK和RST线的路径上有没有串电阻或并电容,这些都会影响烧写时序。电路设计时要尽量避免这样的电路。  如果应用上不得不有这些阻容,电容<101pF,电阻<1Kohm

  • 错误提示

    1、 可能的原因是没有选择正确的下载文件,或者下载文件的长度为0。

  • CDK可以烧录,烧录器烧录失败

    当遇到CDK环境下可以烧录代码,但是拿到烧录器上反而提示烧录失败的现象时,请检查:

    ihex文件的大小是不是超过了芯片的最大DROM size?

    如果超过了,再检查ld文件,是不是出现了段定义错误?如下面ROM段的LENGTH。


    MEMORY

    {

    ROM(RX)   : ORIGIN = 0x00000000,  LENGTH = 64K

    RAM(RWX)  : ORIGIN = 0x20000000,  LENGTH = 4K

    }