Date   

Re: Heap usage monitoring

Becker Markus
 

-----Original Message-----
From: users@lists.zephyrproject.org <users@lists.zephyrproject.org> On Behalf Of Rob Meades via lists.zephyrproject.org
Sent: Montag, 26. Oktober 2020 11:01
To: Zephyr-users@lists.zephyrproject.org
Subject: [Zephyr-users] Heap usage monitoring

I have a question about heap usage monitoring. Apologies if this is the wrong place to ask, please feel free to point me elsewhere if that is the case.

I'm using Zephyr on a Nordic NRF53 chip and I need to monitor how much heap was ever left available, as a minimum, after I have run my CI test suite. This is the true minimum heap ever remaining, so taking account of calls to malloc() as well as to Zephyr's memory management APIs, i.e. the true underlying heap low water mark. I could do this on NRF52 as I had the implementation of _sbrk() that FreeRTOS called into. What is the equivalent in the nRFConnect/Zephyr world? I've asked Nordic (https://devzone.nordicsemi.com/f/nordic-q-a/67495/finding-the-heap-low-water-mark-when-using-nrfconnect-zephyr) but they didn't know the answer immediately and suggested I might ask here instead.

I note that there are heap stress and heap validation functions in sys/sys_heap.c but nothing in there about heap usage. You must have something of this nature to test for memory leaks: can you point me in the right direction please?

Rob






________________________________
The contents of this e-mail and any attachments are confidential to the intended recipient. They may not be disclosed to or used by or copied in any way by anyone other than the intended recipient. If this e-mail is received in error, please immediately notify the sender and delete the e-mail and attached documents. Please note that neither the sender nor the sender's company accept any responsibility for viruses and it is your responsibility to scan or otherwise check this e-mail and any attachments.


API meeting: agenda

Carles Cufi
 


Heap usage monitoring

Rob Meades
 

I have a question about heap usage monitoring.  Apologies if this is the wrong place to ask, please feel free to point me elsewhere if that is the case.

I'm using Zephyr on a Nordic NRF53 chip and I need to monitor how much heap was ever left available, as a minimum, after I have run my CI test suite. This is the true minimum heap ever remaining, so taking account of calls to malloc() as well as to Zephyr's memory management APIs, i.e. the true underlying heap low water mark.  I could do this on NRF52 as I had the implementation of _sbrk() that FreeRTOS called into.  What is the equivalent in the nRFConnect/Zephyr world?  I've asked Nordic (https://devzone.nordicsemi.com/f/nordic-q-a/67495/finding-the-heap-low-water-mark-when-using-nrfconnect-zephyr) but they didn't know the answer immediately and suggested I might ask here instead.

I note that there are heap stress and heap validation functions in sys/sys_heap.c but nothing in there about heap usage. You must have something of this nature to test for memory leaks: can you point me in the right direction please?

Rob


Re: Erasing flash memory problem in nrf52840-dk #flash #nrf52840

Nikos Karamolegkos
 

I solved the issue. The size should be multiple of 4096 (sector size). An other problem that I am facing is that when I run the lwm2m-client over openthread and the last address of the program is 0x591f3 (the first address is 0x0) if I erase a random sector (after the last address) of the memory using pyocd i.e pyocd erase -t nrf52840 --sector 0x64000, I observe that the client loses the connection with the server. Is there any bug or I am missing something? Are any credentials stored somewhere in flash?

Thank you

On 10/16/20 2:20 PM, Nikos Karamolegkos wrote:
Hello, I have made a device DTS overlay file to create my partitions in flash, so I have 3 different partitions (banks) lets say A, B, C respectively. It seems to work. However, each time I am trying to use flash_area_erase to erase the entire bank  (for example delete C bank when running the A bank) I am getting error -22 (EINVAL). I tries to use the function flash_erase but I have the same errors. Also, I tried to erase some bytes (e.g 64) but the error remains. I printed the fa->fa_size and fa->fa_off variables and are correct. Any suggestions?
-- 
Nikos Karamolegkos
R & D engineer at ICS-FORTH
Telecommunications and Networks Lab (TNL)


Re: Testing DTLS with the echo_client and echo_server samples #ble #crypto #nrf52832

Nikos Karamolegkos
 

Does zephyr only supports PSK for the DTLS (e.g echo client, lwm2m client). I haven't seen anything about RPK using ECC. 

On 7/20/20 5:48 PM, Stefan Hristozov wrote:
Hi all,

I want to test DTLS in IPv6 over BLE network.
My set up looks as follows:
                  BLE                                                                     wifi                        wifi
nrf52832 --------------------- Raspberry Pi Border router --------------- WIFI router --------------- PC
2001:db8::1                       2001:db8::2     2001:db9::1                                                  2001:db9::2

1) I compiled the echo_server with:

west build -- -DOVERLAY_CONFIG=overlay-bt.conf

and flashed it on an nrf52832 DK board. The board connects aimlessly with the border router.


2) In another terminal I compiled the echo_client for netive_posix:

west build -b native_posix,

I started the zephyrproject/tools/net-tools/net-setup.sh, and then the native_posix application with:

west build -t run.

3) In another terminal, I started tcpdump listening to the zeht interface. Unfortunately, I cannot see any packets send or received. The console output of the echo_client and echo_servers also does not indicate the something was send or received.

I want to test the sending and receiving of DTLS packets at the nrf52832 board in the three modes:
* Preshared Keys PSK
* Raw Public Keys RPK
* Certificates
I want to secure only UDP over IPv6 (No TCP and no IPv4).

My Questions are:
1) Is the described above procedure correct? I assume something is wrong otherwise I will see some exchanged packets with tcpdump and console output?
2) How to select the DTLS modes PSK/RPK/Certificates?
3) The echo_client and echo_server samples are very complex. Can you point me to a more simple example or describe the procedure for setting up a secured with DTLS UDP communication?

Best regards,
Stefan
-- 
Nikos Karamolegkos
R & D engineer at ICS-FORTH
Telecommunications and Networks Lab (TNL)


Zephyr SDK 0.12.0-beta-1 available for testing

Kumar Gala
 

Hi,

Latest version of the SDK can be found here:

https://github.com/zephyrproject-rtos/sdk-ng/releases/tag/v0.12.0-beta-1

Please download and try things out and report any issues. Please report issues here:

https://github.com/zephyrproject-rtos/sdk-ng/issues

Known issues (these are on the Zephyr side):

* some xtensa platforms may need updating w/regards to Zephyr & Xtensa HAL
[ https://github.com/zephyrproject-rtos/zephyr/pull/23142 ]

* known issue with arm64 and linking C++ & newlib:
[ https://github.com/zephyrproject-rtos/zephyr/issues/28650 ]

Changes since the last release (alpha-1):

• Fix for running SDK on CentOS
• change to install scripts to allow automated install
• RiscV PMP fixes backported from upstream qemu
• Bossa support for SAM4L

- k


Re: NRF52832 and GPIO #gpio #nrf52832

forum.contas@...
 

Ok, found the issue:

 It was do to pin mapping naming.  I was assuming that the pinmaps in Arduino D5, D6, and so on, corresponded to a direct GPIO map, so D5->GPIO_5 and so on... and that's not true.

 After using the correct pin number on Zephyr, it works as it should.
 


Re: NRF52832 and GPIO #gpio #nrf52832

Erik Englund
 

Have you done the initialization by running gpio_pin_configure with GPIO_OUTPUT_ACTIVE as third argument ?

Just to be clear, you´re trying to set pin p0.05 ? That´s located on chip pin7 (QFN48 pkg) ?
Chip pin 5 is routed to p0.03.

Med vänlig hälsning
Erik Englund

Innoware Development AB
Hyttvägen 13
73338 SALA

+46(0)707319440
Org.nr. 556790-2977
www.innoware.se


Re: NRF52832 and GPIO #gpio #nrf52832

forum.contas@...
 

Hi, No MCUBoot.

And yes, the board boots correctly and I can use GDB to debug.

I can see the GPIO driver calls, the values that are set and so on.

My prj.conf file is as simple as it can get: CONFIG_GPIO=y nothing else.

If I flash for example the BT beacon example, it works fine, so  not probably not an issue with the board. I've tried anything more complex, since I'm stuck with the simpler case :)

An example of the debug session:

84                      gpio_pin_set(gpio_dev, led->gpio_pin, 1);
(gdb) s
gpio_pin_set (port=port@entry=0x20000034 <__device_gpio_nrfx_p0>, pin=5 '\005', value=1) at 
/mnt/study/ZephyrRTOS/zephyrproject/zephyr/include/drivers/gpio.h:1005
1005            if (data->invert & (gpio_port_pins_t)BIT(pin)) {
(gdb) s
1006                    value = (value != 0) ? 0 : 1;
(gdb) s
1009            return gpio_pin_set_raw(port, pin, value);
(gdb) s
gpio_pin_set_raw (value=0, pin=<optimized out>, port=0x20000034 <__device_gpio_nrfx_p0>) at /mnt/study/ZephyrRTOS/zephyrproject/zephyr/include/drivers/gpio.h:1009
1009            return gpio_pin_set_raw(port, pin, value);
(gdb) s
z_impl_gpio_port_clear_bits_raw (pins=32, port=0x20000034 <__device_gpio_nrfx_p0>) at 
/mnt/study/ZephyrRTOS/zephyrproject/zephyr/include/drivers/gpio.h:784
784             return api->port_clear_bits_raw(port, pins);
(gdb) p port
$2 = (const struct device *) 0x20000034 <__device_gpio_nrfx_p0>
(gdb) p *port
$3 = {name = 0x3630 "GPIO_0", config = 0x360c <gpio_nrfx_p0_cfg>, api = 0x35e8 <gpio_nrfx_drv_api_funcs>, data = 0x200001bc <gpio_nrfx_p0_data>}
(gdb) p pins
$4 = 32
(gdb) s



Re: NRF52832 and GPIO #gpio #nrf52832

Erik Englund
 

Are you sure that your board boots correctly? ( debug through gdb or just simple serial output )

What version of the SDK are you using?
Is MCUBoot activated in your prj.conf?


NRF52832 and GPIO #gpio #nrf52832

forum.contas@...
 

Not sure if I'm going to have any help on this, but anyway:

I've a standard NRF52832 module that has connected to pin 5 a red LED.

If I flash the module (through JLink) with the Arduino framework, the led blinks without any problem. So there isn't a hardware issue.

Since the module is not a standard supported board, but it's a common supported processor, for using zephyr I've chose a similar board either the nrf52832_mdk or another that uses the same processor, created an overlay file to point the default LED to the correct pin and port (Port 0, pin 5), and flashed the blinky sample example.

It didn't work...

So I've checked several different based NRF52832 boards, checked that there was no pin conflicts on the DTS, only had enabled the CONFIG_GPIO=y on the prj.conf file, but nothing works. Flash it with the Arduino framework for the NRF, the link blinks.

Also flashing, for example the Zephyr BLE beacon example, works without any issue, so it seems I'm missing something crucial on the GPIO front.

I've tested with several different flags, like GPIO_OUTPUT, GPIO_OUTPUT_HIGH and so on, but nothing works.

So... any ideas of what I'm doing wrong, so that this simple GPIO is failing?


Re: missing header file core_cm3.h

Michael E Goldsby
 

Problem solved.
Looks like I neglected to do the export and source commands in  item 1.


Re: API meeting: agenda

Kumar Gala
 

On Oct 20, 2020, at 6:51 AM, Carles Cufi <Carles.Cufi@nordicsemi.no> wrote:

Hi all,

Agenda for today.

- workqueue: Introduce delayable work
- PR: https://github.com/zephyrproject-rtos/zephyr/pull/28891

- Add regulator driver infrastructure
- PR: https://github.com/zephyrproject-rtos/zephyr/pull/28977

- Zephyr Bluetooth Authentication - ZEBRA
- PR: https://github.com/zephyrproject-rtos/zephyr/pull/27360

- API to correlate system time with external time sources and translate uptime to wall-clock time
- Issue: https://github.com/zephyrproject-rtos/zephyr/issues/23465

and then, time permitting we'd like to follow-up on pinctrl:

- Pinmux and pinctrl API: Decide what the priorities for this are, and how to get to LTS with it
- Issue: https://github.com/zephyrproject-rtos/zephyr/issues/22748
Just FYI, some of the label & links are mismatched (ie link takes you to one of the other PRs)

- k


missing header file core_cm3.h

Michael E Goldsby
 

 I prepared a build directory as in the docs:

1) In  <pathto>/zephyr-stuff:
    export ZEPHYR_GCC_VARIANT=zephyr
    export ZEPHYR_SDK_INSTALL=~/zephyr-sdk-0.11.3
    source ~/zephyrproject/zephyr/zephyr-env.sh

    mkdir -p  testapp/build/qemu_cortex_m3

2)  put virtually empty main.c in <pathto>/zephyr-stuff/testapp/src:
      #include <zephyr.h>
      #include <sys/printk.h>
      void main(void) {
                printk("In main\n");
      }


3) Put empty prj.conf and CMakeLists.txt containing

  cmake_minimum_required(VERSION 3.13.1)
  find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
  project(collector)
  FILE(GLOB app_sources src/*.c)
  target_sources(app PRIVATE ${app_sources})

into <pathto>/zephyr_stuff/testapp.

4)  In <pathto>/zephyr_stuff/testapp/build/qemu_cortex_m3:
        cmake -DBOARD=qemu_cortex_m3 ../..
and it appears to have completed correctly.

THen when I go to <pathto>/zephyr-stuff/testapp/build/qemu_cortex_m3
and do
    make
or
    make run
it tries to #include <core_cm3.h> and complains that
there is no such file or directory.

Have I left something out?

Thanks for any help you can give me,
--MIke


API meeting: agenda

Carles Cufi
 


ble central repeat read and write to three peripherals error USAGE FAULT #ble

mfinmuch@...
 

Currently I can connect one central to three peripherals
After the connection is established, the corresponding uuid and handle are also found
I use these two functions to read/write
bt_gatt_write(bt_conn_lookup_index(conn_index), &write_params);
bt_gatt_read(bt_conn_lookup_index(conn_index), &read_params);
conn_idex is the value I entered by myself, it seems I want to connect to the number (if I want to write/read to three peripherals in sequence, fill in 0,1,2 in sequence)

But when central sent read/write to peripheral and ran for one round, the following error occurred when it was about to run the second round
```
[00:00:06.042,266] os: ***** USAGE FAULT *****
[00:00:06.042,297] os: Illegal use of the EPSR
[00:00:06.042,297] os: r0/a1: 0x20000218 r1/a2: 0x00000001 r2/a3: 0x200016fc
[00:00:06.042,297] os: r3/a4: 0x00000000 r12/ip: 0x0000cfe9 r14/lr: 0x0000de87
[00:00:06.042,297] os: xpsr: 0x20000000
[00:00:06.042,297] os: Faulting instruction address (r15/pc): 0x00000000
[00:00:06.042,327] os: >>> ZEPHYR FATAL ERROR 0: CPU exception on CPU 0
[00:00:06.042,327] os: Current thread: 0x200013f0 (unknown)
[00:00:06.780,883] os: Halting system
```
How can I remove this error?
Is there a problem with the bt_conn_lookup_index I quoted in bt_gatt_write/read?
What to do to make one central communicate with multiple peripherals?

Environment:

  • Zephyr 2.4.0
  • zephyr-sdk-0.11.3
  • nrf52840


Confirming that USB OTG Host mode not in the works #usb #otg

carlos.rodriguez@...
 

Hi all:

Just wanted to see if anyone can confirm that we shouldn't expect USB Host mode support in 2.5.0, and that it's not in the works.  I found an old issue from May 19th that seems to indicate that is the case (https://github.com/zephyrproject-rtos/zephyr/issues/25442).  I have been scouring through the PRs since then and it doesn't look like anything related to that functionality has been committed.

Thanks in advance.


Erasing flash memory problem in nrf52840-dk #flash #nrf52840

Nikos Karamolegkos
 

Hello, I have made a device DTS overlay file to create my partitions in flash, so I have 3 different partitions (banks) lets say A, B, C respectively. It seems to work. However, each time I am trying to use flash_area_erase to erase the entire bank  (for example delete C bank when running the A bank) I am getting error -22 (EINVAL). I tries to use the function flash_erase but I have the same errors. Also, I tried to erase some bytes (e.g 64) but the error remains. I printed the fa->fa_size and fa->fa_off variables and are correct. Any suggestions?


introducing new delayable work API

Peter A. Bigot
 

I've been asked to request input on "kernel: workq: introduce delayable work" (#28891), which introduces a new API for supporting delayable work queue submission that cleans up some of the difficulty with correctly using the existing delayed work API.

"cleanup of work queue APIs and behavior" (#28579) (already merged) documented the problems with the existing API and states an intent that it be deprecated.  The problems with that API are not in dispute, only whether existing use in-tree meets the fairly strict requirements necessary for it to behave in a predictable matter.  For the cases I looked at it's not clear that they do.

The existing version of #28891 includes some deprecation commits intended as examples and verification.  These are intended as demonstration, and if there are concerns they don't meet the specific needs of those uses will be extracted and submitted as new PRs when the core functionality is integrated.

Please provide feedback on issue 28891 on github.

Peter


BLE one central_hr connect two peripherals #ble

mfinmuch@...
 

I am using zephyr 2.4.99 to develop a BLE program
Currently, I used central_hr and peripheral in the sample to load separately on two nrf52840s
Now the two boards can communicate with each other, can read and write
But now I want a central_hr to connect to more than two peripherals, but when I loaded the peripheral to the third board, my central_hr could not be connected to the second peripheral
In addition, I also added CONFIG_BT_MAX_CONN=3 in prj.conf, but it still doesn’t work.
I started_sacn() again after finding the UUID
However, after scanning, it will be found that the handles of the two peripherals are the same, and the central request will cause conflicts when reading, so how do you distinguish when the central wants to read data from one of them?
Or is there a sample program for one central to multiple peripherals?

Thanks,
Poyi Lin

401 - 420 of 2694