cc2540吧 关注:52贴子:141

IAR 调试中常遇到的问题

只看楼主收藏回复

问:IAR 调试 CC2540 时程序导入到了芯片的 Flash
中了吗?
答:确实。CC2540 是 SOC(System On Chip)芯片,它的内核就是 8051,它需要从 ROM
中取指令,从 RAM 中取数据来运行。仿真时,CC Debugger 会把程序导入芯片 Flash 中,
再执行仿真。


1楼2015-03-08 21:06回复
    问:当 IAR 调试中出现警告“缺少断点,无法运行到
    main()” ?
    答:出现这个错误的原因是,IAR for 8051 最多只能设置 3 个断点,如果设置过多,当程
    序下载后,将出现些调试警告。解决的方法很简单,去掉一些断点,再重新载入程序。


    2楼2015-03-08 21:07
    回复
      问: 为什么IAR 调试时有很多变量无法查看它的值?
      答:主要的原因是 IAR 编译器设置了优化功能,函数中的自动变量以及一些静态函数都被
      优化过了,所以没有生成对应的调试信息,无法查看和设置断点。解决的方法是关闭编译
      器的优化功能,右键点击工程的 Options -> C/C++ Compiler -> Optimizations 中的 Level 设
      置为 None。


      3楼2015-03-08 21:07
      回复
        问:主节点和从节点通信的过程是怎样的呢?
        答:当从节点发出广告信号(包括设备地址和设备名称之类的附加信息) ;主节点收到此
        广告信号后,向从节点发出扫描请求;当从节点回应扫描时,就完成了设备发现过程。
        问:主节点和从节点通信的过程是怎样的呢?
        答:当从节点发出广告信号(包括设备地址和设备名称之类的附加信息) ;主节点收到此
        广告信号后,向从节点发出扫描请求;当从节点回应扫描时,就完成了设备发现过程。
        问:蓝牙通信中两个节点如何交换数据?
        答:这是蓝牙通信中最让初学者迷惑的地方。大部分通信,尤其是 TCP/IP,交换数据的婚
        介是数据包,但蓝牙通信中,工程师找不到数据包访问方式,于是就产生疑问。其实蓝牙
        最底层也是基于无线数据包交换,只是通过层层封装,交付给工程师的 API 接口就变成了
        Client 访问 Server 的方式。
        问:Client 和 Server 节点是如何定义呢?
        答:通俗地说吧,Server(服务器)就是数据中心,Client(客户端)就是访问数据者。特
        别说明,它与主/从设备是独立的概念:一个主设备既可以充当 Server,又可以充当 Client;
        从设备亦然。


        7楼2015-03-08 21:13
        回复
          问:Server 是如何提供数据呢?
          答:Server 首先将一个服务按“属性/句柄/数值/描述”这种格式予以组织,然后调用 API
          函数 GATTServApp_RegisterService 将服务数据进行注册。举个实例吧,设提供一个电池
          电量服务字节,它允许 Client 读取,数据为一个 8 比特无符号数(0~100%) ,它的组织如
          下: 02 25 00 19 2A, 这 5个数据 (小端格式) 分别是: 0x02=只读属性, 0x0025=句柄; 0x2A19=
          服务 UUID。


          8楼2015-03-08 21:15
          回复
            问:不明白 Server 提供服务中的 UUID?
            答:UUID(Universal Unique Identifier)全球惟一标识符,本来是 SIC 组织分配给特定蓝牙服
            务的标识,如分配 0x2A25 为设备序列号的 UUID,这样任意蓝牙设备都可以通过它得到
            另一个设备的序列号。
            打个类比,它就像书名,如《现代操作系统》 ,所有人一看就知道它是计算机大师 Andrew
            S. Tanenbaum 写的书


            9楼2015-03-08 21:19
            回复
              问:什么是 Server 提供服务中的句柄呢?
              答:句柄(Handle)就是服务数据在数据中心的地址,当所有的服务数据组织起来后,它总
              得有个先后顺序,某个服务的位置就是它的句柄。还是上面的类比,如果想去图书馆借阅
              《现代操作系统》 ,需要查明该书在哪一层楼,哪个房间,这就是该书的 Hanle。


              10楼2015-03-08 21:20
              回复
                问:什么是 Server 提供服务中的句柄呢?
                答:句柄(Handle)就是服务数据在数据中心的地址,当所有的服务数据组织起来后,它总
                得有个先后顺序,某个服务的位置就是它的句柄。还是上面的类比,如果想去图书馆借阅
                《现代操作系统》 ,需要查明该书在哪一层楼,哪个房间,这就是该书的 Hanle。


                11楼2015-03-08 21:23
                回复
                  问:服务的属性与描述有区别吗?
                  答:有区别,服务的属性是 Server 设置访问权限。(只读) ,或者(读/写) 。
                  问:Client 如何访问 Server 的服务呢?
                  答:大致分三类:读取服务的值,需要知道服务的 UUID 或者 Handle;写服务的值,需要
                  知道服务的 Hanle;写服务描述符,需要知道该 Descriptor 的 Hanle。


                  12楼2015-03-08 21:24
                  回复
                    问:如何知道一个服务的 Handle?
                    答:根据服务的 UUID 调用 API 函数 GATT_ReadUsingCharUUID
                    协议栈会返回该服务的Handle。特别注意的是,一个服务的 Descriptor 的 Handle 总是该服
                    务的 Handle+1,如电池电量服务的 Handle 是 0x0025,那么它的 Descriptor 的 Handle 是
                    0x0026。
                    问:Server 可以访问 Client 吗?
                    答:蓝牙通信中,Server 不能直接访问(读/写)Client,但是可以通知(Notification)Client,
                    通知的前提是 Client 通过写 Descriptor 使能通知功能。例如,某 Server 发现电池电量已经
                    低于安全阀值,它可以调用 GATT_Notification 通知所有已连接的 Client,但是 Client 接收
                    后如果处理是它自己的事情。


                    13楼2015-03-08 21:27
                    回复
                      问:如果得知电池容量?
                      答:任何使用电池供电的设备都必须精确监控电池容量,否则设备可以突然断电而停止工
                      作,它的基本原理是通过 ADC(模数转换器)计算电池电压。以 CC2540 芯片用一钮扣电
                      池为例,电池电压从 2.0v~3.0v,即电量的 0%~100%;CC2540 有一 10比特的 ADC,量
                      程范围为0~511,参考电压为 1.25v,最大测量电压为 3.75v,以上信息可以得知: (v/3)
                      / 1.25 * 511 = adc,则 2.0v=273adc,3.0v=409adc,根据下图可以很容易得知 ADC 转换为
                      电压的公式:
                      Percentage / (X – 273) = 100 / 136 = 25 / 34,变换后为:
                      Percentage = (X - 273) * 25 / 34,为四舍五入提高计算精度则有:
                      Percentage = [(X - 273) * 25 + 33] / 34。


                      14楼2015-03-08 21:31
                      回复
                        问:蓝牙发射信号功率调整会影响通信距离吗?
                        答:会,以 TI 公司的 CC2540为例,它支持 4种发射功率选择:4dBm、0dBm、-6dBm 和
                        -23dBm,按无线电功率定义:LdBm=10lg(Pwr/1mW),以上 4 种分贝值换算成瓦特为:
                        2.51mW、1mW、0.251mW 和 0.005mW,有效通信距离分别为:30 米、10 米、7 米和 3
                        米。


                        15楼2015-03-08 21:32
                        回复
                          问:如何知道两个蓝牙通信节点之间的距离?
                          答:要知道蓝牙通信节点(如手机和蓝牙设备)之间的距离,最容易实现的方法是通过读
                          取接收 RSSI(Received Signal Strength
                          Indication)值来计算。无线通讯中功率与距离的关系如下:
                          其中 A 可以看作是信号传输 1 米远时接收信号的
                          功率,n 是传播因子(它受障碍,温度和湿度等影响) ,r 是节点之间的距离。当确定了常
                          数 A 与 n 的值后,距离 r 就可以根据 PR(dBm)计算出来。
                          问:如何获取蓝牙节点的接收 RSSI 值?
                          答:具体的设备接收 RSSI 值的方法不一样,以 iPhone 手机为例,iOS 提供 API 函数获取
                          RSSI 值;TI 公司的 CC2540 芯片的 BLE 协议栈中,首先将读取 RSSI 值回调函数挂载到
                          gapRolesRssiRead_t 类型的指针下, 建立连接后, 主设备调用 GAPCentralRole_StartRssi () ,
                          从设备调用
                          GAPRole_SetParameter(GAPROLE_RSSI_READ_RATE, ……)。这样就可以定时读取接收
                          的 RSSI 值了。


                          16楼2015-03-08 21:35
                          回复
                            问:如何开展读取 RSSI值的实验?
                            答:读取 RSSI 值的实验可以这样搭建,主设备固定位置,向从设备发送信号,从设备 LED
                            光和Buzzer 报警为通信成功,逐次移动从设备,而获取 RSSI 值随物理距离之间的关系。
                            下图是笔者做实验的数据:
                            Distance(m) 1 2 3 4 5 6 7 8 9 10
                            RSSI(dBm) -47 -59 -73 -80 -80 -79 -85 -88 -86 -87
                            Loss(p) 0 0 9 11 27 2 50 32 22 49
                            实验器材为 2 块 CC2540 芯片,主芯片发射功率为 4dBm(2.51mW),Loss 是通信节点中失
                            败次数。


                            17楼2015-03-08 21:38
                            回复
                              请问楼主这个错误他说是关于标识符,要怎么改


                              18楼2016-05-19 16:48
                              回复