-
Notifications
You must be signed in to change notification settings - Fork 7.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
pppos client crash (IDFGH-1201) #3506
Comments
@yavortomov Thanks for your interest in this example. Just like what you said, after esp32 sends out the "+++", it doesn't received any response it want in time. How often this example failed at this line? Does any delay before |
I also tried making the MODEM_COMMAND_TIMEOUT_CHANGE to 3000 & 5000. Same issue. Dissecting the program: DCE_CHECK(dte->send_cmd(dte, "+++", MODEM_COMMAND_TIMEOUT_MODE_CHANGE) == ESP_OK, "send command failed", err); Now if you check inside, send_cmd function the following lines get executed; uart_write_bytes(esp_dte->uart_port, command, strlen(command)); This means, the +++ is written by uart_write_bytes function and a semaphore is issued for about 3000 ms. Now I dont know how does the program control goes from here to static esp_err_t bg96_handle_exit_data_mode(modem_dce_t *dce, const char *line)). Here is where the response gets parsed. I tried putting a print line inside the function. The program control never reaches here. Thank you |
Hi @yavortomov what you explained is pretty right. BG96 may need more time to change working mode. I don't know why the original setting of 3000 ms also doesn't work for me now. But after I change it to a larger value (e.g. 5000 or 10000), BG96 worked again. Have a try.
After esp32 send "+++" to bg96, it will wait for a semaphore. After bg96 response something, the |
Thanks for the response about the program. That was very helpful. But even with the increase in the timeout to 5000 or 10000, I am getting the same issue . Finding 1 It looks like after "+++" command is issued, the uart pattern detection interrupt is never triggered. I have inserted print statements inside the uart_event_task_entry code block Finding 2 According to Quectel documentation, we need to pause 1 sec, send "+++" and then pause 1 sec to successfully put the modem into PPP_Modem. I think my modem does go into command mode successfully, but the uart_rx interrupt never detects it and classifies it as a Thanks again! |
@yavortomov case MODEM_PPP_MODE:
dce->handle_line = bg96_handle_atd_ppp;
// DCE_CHECK(dte->send_cmd(dte, "ATD*99***1#\r", MODEM_COMMAND_TIMEOUT_MODE_CHANGE) == ESP_OK, "send command failed", err);
// DCE_CHECK(dce->state == MODEM_STATE_SUCCESS, "enter ppp mode failed", err);
// ESP_LOGD(DCE_TAG, "enter ppp mode ok");
dte->send_cmd(dte, "ATD*99***1#\r", MODEM_COMMAND_TIMEOUT_MODE_CHANGE);
vTaskDelay(pdMS_TO_TICKS(1000));
dce->mode = MODEM_PPP_MODE;
break; If you really get the response and get into command mode successfully, you might see a warning in the log like "Unknown response: NO CARRIER" next time you send any AT commands. |
@suda-morris Thank you for all of your help and effort. We ended up adding a 2nd AT command (AT) right after the "+++". Basically, an additional check that the modem is in AT mode. The uart pattern detection is triggered by the "OK" response of the 2nd AT command. |
@suda-morris Thanks |
@yavortomov Thanks for your feedback. For the configuration, I just use the default value. But if it's not efficient for your application, there might be some warnings in the log, it's OK to change them in the menuconfig. |
@suda-morris I have been following this thread. Thanks very much for your feedback on "+++" issues. Just a quick question, is there an example on how to run the ppos client in loop? I renamed the This successfully posts the data once and in the second iteration, it gets stuck forever after entering into ppp mode. I believe this is because tcp_adapter_init() function gets called everytime without getting destructed in each cycle. Under I am acquiring sensor data using 3 sensor_tasks every 1 sec. I would like to spawn the modem_task to push all the data every 15 minutes and then shutdown modem & go back to sensor acquisition. please let me know if there is an example which would be helpful. |
@9lash If I understand you correctly, why not put the |
@suda-morris Yes I tried putting |
@9lash I'm facing the exact same issue that you are mentioning. I want to run the ppos client in a loop in such a way that the client can be turned off/on (in my case depending on wether or not I have WiFi access or not). |
I'm also having problems trying to reconnect via PPP. I'm using BG96 module too, but In my case, i want to reconnect after a signal loss. I think my implementation is very similar to @9lash , but instead of disconnecting by command, I'm trying to handle a disconnect after a signal lost. I'm also using Wifi, and after a disconnect in PPP, I'm unable to reconnect via Wifi, It connects to the AP but never gets and IP and the connection is closed, after that my wifi state machine returns to a scan mode, but esp wifi scan never ends. |
I made a workaround in my code by calling ppp functions directly, without the pppapi layer, from what I saw here: http://lists.openvehicles.com/pipermail/ovmsdev/2018-April/004622.html this may be not thread-safe however. So I'm successfully running PPP in a loop, but potentially not in a thread safe way. @9lash and @gardi-innovation , can you check if calling pppos_create directly, instead of pppapi_pppos_create for example, solves the problem for you? |
got the same problem. after calling esp_modem_exit_ppp the esp_modem_setup_ppp seems to freeze. It seems like the code stops on the pppapi_pppos_create call, but no idea why. As if the PPP_PHASE_ESTABLISH is never called the second time. I tried to replace pppapi_pppos_create with pppos_create but with no luck so far |
I have the same problem as @fromeijn . Reconnecting does not work. @Torarqui and @gardi-innovation , have you found a solution in the meantime? Any update would be appreciated! |
@fromeijn @GVLEVA I'm using IDF release 3.3. Based on the pppos example, I made some changes to
The call sequence for a successful reconnection for me Is:
From my understanding, making those changes makes the code not thread-safe from the tcpip point of view. pppapi were intended to be a thread-safe way to call tcpip functions from inside It's own task context, but when we call ppp functions directly, we are running then in the caller task context and that may lead to problems. I reckon there's some kind of semaphore_give missing in Can you try the changes I mentioned and see how it goes for you? Then we could try to pinpoint whats wrong inside the pppapi calls. |
@Torarqui Thanks for your feedback, I did apply the changes you suggested and that worked! Thank you for that. Still I like to find out what is going wrong here, so we can fix it the right way. I would like to dive in to it, only don't actual have any time at this moment. Maybe next week. By the way I'm also using IDF V3.3 release. |
mmm if i do ppp_close(esp_dte->ppp, 0), then it also doesn't work 😐 |
Yeah I saw that too, but I have no clue on why that happens. For now I'm just using 1. 🤷🏻♂ |
Hi all, I'm succesfully using the pppos_client example (IDF master branch) with the Sequans Monarch LTE CAT M1/NB-IoT chipset of Pycom modules. The sequence of AT commands is quite different from the one in the examples SIM800/BG96, but I managed to make it work. The problem is that the original example code crashes because the pattern detection does not work properly. To show what happens in response to an AT command I had to comment the receive callback inside
It seems that a spurious The modem is by default configured for a baudrate of 921600, but I tried also with lower ones. I also tried unsuccefully to change the default uart configurations parameters. |
Hi @suda-morris |
Hi, I'm trying to run the pppos_client example with sim800 without crashing that first time. I think you described the problem well: the problem is a call to esp_handle_uart_data that needs ppp to be initialized (for pppos_input_tcpip) , which it is not yet set (correct me if i am wrong). |
Hi @fetiennex, if you refer to the errors resulting from the not properly handled pattern recognition, it turned out to be a delay in between the bytes sent by the modem. I managed to solve it by setting properly the timeout with |
Hello @iCarletto , thanks for your suggestion and sorry for my late response. I managed this issue with a boolean in the uart_event_task_entry which gets set to true when the modem is properly setup, inhibiting data from being handled too soon.
Does it mean i set the uart_config wrong ? I noticed in your code you use a .source_clk field, but when i tried to compile it it told me this wasn't a valid field of the uart_config struct, also the espressif documentation doesn't mention it. Is there a reason you included this field ? |
Hi @fetiennex , I actually just copied the the struct field Regarding the use of the Sequans Monarch modem, I did test only the NB-IoT and not the LTE CAT-M1 feature. The code is 99% from the ppos_example, but the template in the example does not work out of the box with this modem and few key changes in the AT command sequence are required. The code I developed is freely available in the firmware folder of my Iot-AIO project repository, an IoT Adapter for Analog Industrial Transducers. You can just extract the LTE folder from the components. If you don't receive a response to the AT command, most probably something is wrong in the configuration, either the pin or the baudrate. Here is a modified version of the uart_echo example I used to test the AT commands: /* Uart Events Example
This example code is in the Public Domain (or CC0 licensed, at your option.)
Unless required by applicable law or agreed to in writing, this
software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
CONDITIONS OF ANY KIND, either express or implied.
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_system.h"
#include "nvs_flash.h"
#include "driver/uart.h"
#include "driver/gpio.h"
#include "freertos/queue.h"
#include "esp_log.h"
/**
* This is a example example which echos any data it receives on UART back to the sender.
*
* - port: UART2
* - rx buffer: on
* - tx buffer: off
* - flow control: off
*
* This example has been tested on a 3 node RS485 Serial Bus
*
*/
// Note: UART2 default pins IO16, IO17 do not work on ESP32-WROVER module
// because these pins connected to PSRAM
#define ECHO_TEST_TXD (33)
#define ECHO_TEST_RXD (34)
// RTS for RS485 Half-Duplex Mode manages DE/~RE
#define ECHO_TEST_RTS (32)
// CTS is not used in RS485 Half-Duplex Mode
#define ECHO_TEST_CTS (35)
#define BUF_SIZE (1024)
#define BAUD_RATE (921600)
// Read packet timeout
#define PACKET_READ_TICS (100 / portTICK_RATE_MS)
#define ECHO_TASK_STACK_SIZE (2048)
#define ECHO_TASK_PRIO (10)
#define ECHO_TEST_FLOW_HW
static const char *TAG = "ECHO_APP";
// An example of echo test with hardware flow control on UART
static void uart_modem2esp(void *arg)
{
int len = 0;
// Allocate buffers for UART
uint8_t* data = (uint8_t*) malloc(BUF_SIZE);
while(1) {
//Read data from UART
len = uart_read_bytes(UART_NUM_1, data, BUF_SIZE, PACKET_READ_TICS);
//Write data back to UART
if (len > 0){
// ESP_LOGI(TAG, "Received %d bytes: %.s", len, data);
uart_write_bytes(UART_NUM_0, (char*)data, len);
}
vTaskDelay(100 / portTICK_PERIOD_MS);
}
}
static void uart_esp2modem(void *arg)
{
int len = 0;
// Allocate buffers for UART
uint8_t* data = (uint8_t*) malloc(BUF_SIZE);
while(1) {
//Read data from UART
len = uart_read_bytes(UART_NUM_0, data, BUF_SIZE, PACKET_READ_TICS);
//Write data back to UART
if (len > 0)
uart_write_bytes(UART_NUM_1, (char*)data, len);
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
}
void app_main(void)
{
uart_config_t uart0_config = {
.baud_rate = 115200,
.data_bits = UART_DATA_8_BITS,
.parity = UART_PARITY_DISABLE,
.stop_bits = UART_STOP_BITS_1,
.flow_ctrl = UART_HW_FLOWCTRL_DISABLE,
.rx_flow_ctrl_thresh = 122,
.source_clk = UART_SCLK_APB,
};
uart_config_t uart1_config = {
.baud_rate = 921600,
.data_bits = UART_DATA_8_BITS,
.parity = UART_PARITY_DISABLE,
.stop_bits = UART_STOP_BITS_1,
#ifdef ECHO_TEST_FLOW_HW
.flow_ctrl = UART_HW_FLOWCTRL_CTS_RTS,
#elif ECHO_TEST_FLOW_NONE
.flow_ctrl = UART_HW_FLOWCTRL_DISABLE,
#endif
.rx_flow_ctrl_thresh = 122,
.source_clk = UART_SCLK_APB,
};
// Set UART log level
esp_log_level_set(TAG, ESP_LOG_INFO);
ESP_LOGI(TAG, "Start Modem application test and configure UART.");
// Install UART driver (we don't need an event queue here)
// In this example we don't even use a buffer for sending data.
uart_driver_install(UART_NUM_0, BUF_SIZE * 2, 0, 0, NULL, 0);
uart_driver_install(UART_NUM_1, BUF_SIZE * 2, 0, 0, NULL, 0);
// Configure UART parameters
uart_param_config(UART_NUM_0, &uart0_config);
uart_param_config(UART_NUM_1, &uart1_config);
ESP_LOGI(TAG, "UART set pins, mode and install driver.");
// Set UART1 pins(TX: IO23, RX: I022, RTS: IO18, CTS: IO19)
uart_set_pin(UART_NUM_0, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE);
#ifdef ECHO_TEST_FLOW_HW
uart_set_pin(UART_NUM_1, ECHO_TEST_TXD, ECHO_TEST_RXD, ECHO_TEST_RTS, ECHO_TEST_CTS);
#elif ECHO_TEST_FLOW_NONE
uart_set_pin(UART_NUM_1, ECHO_TEST_TXD, ECHO_TEST_RXD, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE);
gpio_set_direction((gpio_num_t)ECHO_TEST_RTS, GPIO_MODE_OUTPUT);
gpio_set_level((gpio_num_t)ECHO_TEST_RTS, 0);
#endif
// Set regular UART mode
uart_set_mode(UART_NUM_0, UART_MODE_UART);
uart_set_mode(UART_NUM_1, UART_MODE_UART);
//A uart read/write example without event queue;
xTaskCreate(uart_modem2esp, "uart_modem2esp", ECHO_TASK_STACK_SIZE, NULL, ECHO_TASK_PRIO, NULL);
xTaskCreate(uart_esp2modem, "uart_esp2modem", ECHO_TASK_STACK_SIZE, NULL, ECHO_TASK_PRIO, NULL);
} |
@iCarletto thanks a lot for this code and the repo ! I will verify my pin definitions and baudrate too, but this is great help ! |
I solved it this way, and finally can mount the test for a long time |
@luzhichao1997606 you managed to solve this ppp init and deinit in cycle? could you share with me ? i copied the esp_modem_stop_pp and i am getting this error: E (63433) esp-modem: esp_dte_handle_line(85): handle line failed I (72493) AT: enter command mode failed ! E (163503) esp-modem: esp_modem_dte_send_cmd(216): process command timeout |
Hii , @yavortomov and @suda-morris ...i get a same issue ...check below error.. file: "../main/pppos_client_main.c" line 305 abort() was called at PC 0x40083ecf on core 0 Backtrace:0x4008501f:0x3ffb56d0 0x400856bd:0x3ffb56f0 0x4008938a:0x3ffb5710 0x40083ecf:0x3ffb5780 0x400d59de:0x3ffb57a0 0x400d3f62:0x3ffb58d0 0x400856c5:0x3ffb5900 |
Hello everyone! I'm using the structure of pppos client example with the sim7600 and it have the same problem that all of you mentioned. The esp_modem_setup_ppp() is working only for the first time, but the code fails when I try another iteration. I followed all the step like the example, but the code can't pass the next line |
hello everyone i am using sim800 like quectelm95 module,i run many time and its work very fine but today whole day i try but its crash,check below logs and pls let me know how to resolve this issue... after uart_write cmd =AT+CBC Core 0 register dump: A2 : 0x00000000 A3 : 0x3ffb6010 A4 : 0x00000014 A5 : 0x000000a5 Backtrace:0x400d4817:0x3ffb5ff0 0x400d4ba6:0x3ffb6010 0x400d4bd3:0x3ffb6040 0x400d4c71:0x3ffb6060 0x40086051:0x3ffb6080 0x400856c5:0x3ffb60a0 0x400d4ba6: esp_task_wdt_reset at C:/Users/Frank/Desktop/esp-idf/components/esp_common/src/task_wdt.c:324 0x400d4bd3: idle_hook_cb at C:/Users/Frank/Desktop/esp-idf/components/esp_common/src/task_wdt.c:88 0x400d4c71: esp_vApplicationIdleHook at C:/Users/Frank/Desktop/esp-idf/components/esp_common/src/freertos_hooks.c:51 (discriminator 1) 0x40086051: prvIdleTask at C:/Users/Frank/Desktop/esp-idf/components/freertos/tasks.c:3386 (discriminator 1) 0x400856c5: vPortTaskWrapper at C:/Users/Frank/Desktop/esp-idf/components/freertos/xtensa/port.c:143 ELF file SHA256: 75d841c28aafad82 Rebooting... rst:0xc (SW_CPU_RESET),boot:0x12 (SPI_FAST_FLASH_BOOT) entry 0x400806f4 I (159) esp_image: segment 3: paddr=0x0002bbb8 vaddr=0x40080404 size=0x04460 ( 17504) load I (337) esp_image: segment 5: paddr=0x00097674 vaddr=0x40084864 size=0x06ee0 ( 28384) load I (357) boot: Loaded app from partition at offset 0x10000 I (386) cpu_start: App cpu up. E (3017) esp-modem: esp_modem_dte_send_cmd(243): process command timeout |
Environment
v3.3-beta1-512-g89ae590
1.22.0-80-g6c4433a
Problem Description
I have a Quectel chip connected to ESP32 and utilizing the pppos_client from the IDF examples (https://github.com/espressif/esp-idf/tree/master/examples/protocols/pppos_client)
The Quectel chip will power on and display all information and pull an IP address. I'm able to send and receive messages via MQTT. However, at the point of the switching between data mode to AT mode so I the chip can be powered down properly via AT command the ESP errors out and crashes.
I think the problem is with the line below in the bg96.c file. Looks like the "+++" command is not successfully sent and that causes all the error checks to fail.
DCE_CHECK(dte->send_cmd(dte, "+++", MODEM_COMMAND_TIMEOUT_MODE_CHANGE) == ESP_OK, "send command failed", err);
I was able to switch the Quectel chip from data mode to AT command mode via an AT command (Using UART directly to my PC) "+++" so that is the correct command. Also, I tried adding a delay before and after due to the manufacture time requirements.
The error:
I (26387) system_api: Base MAC address is not set, read default base MAC address from BLK0 of EFUSE
I (26397) pppos_example: MQTT other event id: 7
I (26827) MQTT_CLIENT: Sending MQTT CONNECT message, type: 1, id: 0000
I (27177) pppos_example: MQTT_EVENT_CONNECTED
I (27177) pppos_example: sent subscribe successful, msg_id=27866
I (27237) pppos_example: MQTT_EVENT_SUBSCRIBED, msg_id=27866
I (27247) pppos_example: sent publish successful, msg_id=0
I (27307) pppos_example: MQTT_EVENT_DATA
TOPIC=/topic/esp-pppos
DATA=Here 2
I (27307) pppos_example: Before MQTT destroy
I (27567) pppos_example: MQTT_EVENT_DATA
TOPIC=/topic/esp-pppos
DATA=Hello From BMK via cell!!!
I (27617) pppos_example: Modem PPP Stopped
I (29567) esp-modem: Reached Shutdown
E (33567) esp-modem: esp_modem_dte_send_cmd(216): process command timeout
E (33567) bg96: bg96_set_working_mode(301): send command failed
E (33567) esp-modem: esp_modem_dte_change_mode(305): set new working mode:0 failed
E (33577) esp-modem: esp_modem_exit_ppp(619): enter command mode failed
ESP_ERROR_CHECK failed: esp_err_t 0xffffffff (ESP_FAIL) at 0x40085088
0x40085088: _esp_error_check_failed at /root/esp/esp-idf/components/esp32/panic.c:720
file: "/root/esp/Yavor/workspace/pppos_client/main/pppos_client_main.c" line 252
func: app_main
expression: esp_modem_exit_ppp(dte)
ELF file SHA256: 6964fb894b25fc4303d8b1a605d98939a5fa567bf9c04168c7ab5b8a8b2fbfef
Backtrace: 0x40084c20:0x3ffb5f00 0x4008508b:0x3ffb5f20 0x400d4233:0x3ffb5f40 0x400d247e:0x3ffb6000 0x40086b8d:0x3ffb6020
0x40084c20: invoke_abort at /root/esp/esp-idf/components/esp32/panic.c:715
0x4008508b: _esp_error_check_failed at /root/esp/esp-idf/components/esp32/panic.c:721
0x400d4233: app_main at /root/esp/Yavor/workspace/pppos_client/main/pppos_client_main.c:252 (discriminator 1)
0x400d247e: main_task at /root/esp/esp-idf/components/esp32/cpu_start.c:526
0x40086b8d: vPortTaskWrapper at /root/esp/esp-idf/components/freertos/port.c:403
==================== ESP32 CORE DUMP START ====================
================== CURRENT THREAD REGISTERS ===================
pc 0x40084cf8 0x40084cf8 <invoke_abort+24>
lbeg 0x400014fd 1073747197
lend 0x4000150d 1073747213
lcount 0xfffffffb 4294967291
sar 0x4 4
ps 0x60520 394528
threadptr
br
scompare1
acclo
acchi
m0
m1
m2
m3
expstate
f64r_lo
f64r_hi
f64s
fcr
fsr
a0 0x400851d2 1074287058
a1 0x3ffb64e0 1073439968
a2 0x3ffb1d24 1073421604
a3 0x40000000 1073741824
a4 0x3f4035d8 1061172696
a5 0xfc 252
a6 0x3f403914 1061173524
a7 0x3f40380c 1061173260
a8 0x0 0
a9 0x3ffb64c0 1073439936
a10 0x0 0
a11 0x84 132
a12 0x14 20
a13 0xffffffff -1
a14 0x0 0
a15 0xffffffe8 -24
==================== CURRENT THREAD STACK =====================
#0 0x40084cf8 in invoke_abort () at /root/esp/esp-idf/components/esp32/panic.c:156
#1 0x400851d2 in _esp_error_check_failed (rc=-1, file=0x3f4035d8 "/root/esp/Yavor/workspace/pppos_client/main/pppos_client_main.c", line=1074287058, function=0x3ffb64e0 "\330\065@", <incomplete sequence \374>, expression=0x3ffb1d24 "ESP_ERROR_CHECK") at /root/esp/esp-idf/components/esp32/panic.c:721
#2 0x400d4326 in app_main () at /root/esp/Yavor/workspace/pppos_client/main/pppos_client_main.c:252
#3 0x400d2339 in main_task (args=0x0) at /root/esp/esp-idf/components/esp32/cpu_start.c:526
#4 0x400872a8 in vPortTaskWrapper (pxCode=0x400d22d4 <main_task>, pvParameters=0x0) at /root/esp/esp-idf/components/freertos/port.c:143
======================== THREADS INFO =========================
Id Target Id Frame
9 process 8 0x400870cd in xQueueGenericReceive (xQueue=0x3ffafe10, pvBuffer=0x0, xTicksToWait=4294967295, xJustPeeking=0) at /root/esp/esp-idf/components/freertos/queue.c:1592
8 process 7 0x400870cd in xQueueGenericReceive (xQueue=0x3ffbc470, pvBuffer=0x0, xTicksToWait=4294967295, xJustPeeking=0) at /root/esp/esp-idf/components/freertos/queue.c:1592
7 process 6 0x400870cd in xQueueGenericReceive (xQueue=0x3ffb4a68, pvBuffer=0x0, xTicksToWait=4294967295, xJustPeeking=0) at /root/esp/esp-idf/components/freertos/queue.c:1592
6 process 5 0x400870cd in xQueueGenericReceive (xQueue=0x3ffaea50, pvBuffer=0x0, xTicksToWait=4294967295, xJustPeeking=0) at /root/esp/esp-idf/components/freertos/queue.c:1592
5 process 4 0x400890c4 in prvProcessTimerOrBlockTask (xNextExpireTime=, xListWasEmpty=) at /root/esp/esp-idf/components/freertos/timers.c:589
4 process 3 0x400870cd in xQueueGenericReceive (xQueue=0x3ffb9af8, pvBuffer=0x3ffbada0, xTicksToWait=10, xJustPeeking=0) at /root/esp/esp-idf/components/freertos/queue.c:1592
3 process 2 0x40127206 in esp_pm_impl_waiti () at /root/esp/esp-idf/components/esp32/pm_esp32.c:487
2 process 1 0x40127206 in esp_pm_impl_waiti () at /root/esp/esp-idf/components/esp32/pm_esp32.c:487
======================= ALL MEMORY REGIONS ========================
Any guidance will be helpful.
Thanks
The text was updated successfully, but these errors were encountered: