大家好,

我目前正在實作Write通訊,參考了example中的ble_app_blinky。

當手機下了命令後,程式會運行這個函式,如下圖。

資料會儲存在p_evt_write->data[0],且data[0]在ble_gatts_evt_write_t的結構型態為uint8_t data[1];

如果我今天手機下的命令是一個array,我應該如何修改才能收到全部資料呢?

Best regards,
Kai

  • kai 那你只要得到p_evt_write->len 和p_evt_write->data,就行了。p_evt_write->data接收数据的首地址,p_evt_write->len 则是接收到数据的总长度。这样你就可以得到全部的数据了

kai 那你只要得到p_evt_write->len 和p_evt_write->data,就行了。p_evt_write->data接收数据的首地址,p_evt_write->len 则是接收到数据的总长度。这样你就可以得到全部的数据了

  • kai 回复了此帖

    Wireless-Tech

    我嘗試修改看看,謝謝

      Wireless-Tech
      我已經成功取得數值了,非常感謝。

        6 天后

        Wireless-Tech
        我在後續的實作過程中遇到了問題。
        請參考此圖 :

        這個函式是在處理Characteristic觸發Event後要做的應用。

        問題 => 函式使用【for loop】,要處裡的資料長度超過4byte後,RTT Log會出現異常(不再顯示任何Log,包含其他函式的Log),但硬體功能正常。

        我已經逐步拆分到這個問題點,已經沒有其他想法了,不知道您是否有其他見解可以協助我。

          kai 在Main函数中的for( ; ; ) 加上NRF_LOG_PROCESS()试试

            • Kkai

                等级 1
              • 已编辑

              Wireless-Tech
              加入NRF_LOG_PROCESS(),依然有問題,請問我可以提供專案給您測試嗎?

                kai 可以

                  • Kkai

                      等级 1
                    • 已编辑

                    Wireless-Tech
                    附件是我的專案 =>

                    lab07-ble-customservice-ts200-ota.zip
                    25MB

                    開發版 => nRF52-DK
                    SDK => v17.1.0
                    IDE => Segger

                    請測試此Characteristic,測試方式如下。

                    正常 =>
                    LED3亮 => 手機輸入0x01, 0x02, 0x03, 0x04
                    LED3滅 => 手機輸入 0x02, 0x02, 0x03, 0x0
                    此時所有RTT功能都正常,連同UUID : 0xFF1D使用Notify都能正常顯示Log。

                    異常 =>
                    LED3亮 => 手機輸入0x01, 0x02, 0x03, 0x04, 0x05, 0x06
                    LED3滅 => 手機輸入 0x02, 0x02, 0x03, 0x04, 0x05, 0x06
                    只要輸入超過4byte,RTT就不再打印任何Log。

                      kai uint8_t OTA_Data[6] = {0};这个数组你定义的有问题。里面可以存放6个元素就正常了。

                        Wireless-Tech
                        請問這是Segger環境問題嗎?還是其他原因?

                          kai 是你的源码在定义数组的时候没有指定大小导致它在发 4 个字节以上的时候可能就溢出了

                            Wireless-Tech
                            我注意到了,非常感謝。

                              撰写回复...