app_run中的函数没有被调用

Viewed 44

一、描述你遇到的问题

我正在做一个项目,其中有用到星闪通信的功能,主要是client端发送一个数据给server端,然后server端用这个数据去驱动外设,然后我叫ai用官方的例子“串口透传测试”的代码给我魔改一下,并把server端的代码和client的代码分开到两个文件中,然后把server端和client端的代码编译烧录后都不能执行指定的入口函数,在我还没加入星闪通信功能时,是能正常进入的,实际结果和预期结果是一致的,加入后,不知道什么原因没能执行入口函数,不知道是否执行了app_run()函数

二、你具体做的所有步骤结果截图

以下是client端的入口文件application\samples\smart_kitchen\client\client_entry.c
#include "cmsis_os2.h"
#include "client_entry.h"
#include "soc_osal.h"
#include "app_init.h"

#include "logic_task.h"
#include "sensor_reader_task.h"
#include "communication_task.h"

#define LOGIC_TASK_STACK_SIZE 0x1000
#define LOGIC_TASK_PRIO (osPriority_t)(17)
#define SENSOR_TASK_STACK_SIZE 0x1000
#define SENSOR_TASK_PRIO (osPriority_t)(18)
#define SLE_CLIENT_COMM_TASK_STACK_SIZE 0x1000
#define SLE_CLIENT_COMM_TASK_PRIO 28

//传感器消息队列的id
osMessageQueueId_t sensor_data_qid;

//通信任务消息队列id
osMessageQueueId_t comm_data_qid;

static void smart_kitchen_client_entry(void){

osal_printk("[client]!!! ENTERING smart_kitchen_client_entry !!!\r\n");

//创建一个消息队列
comm_data_qid=osMessageQueueNew(COMM_DATA_QUEUE_SIZE,sizeof(comm_data_t),NULL);
if(comm_data_qid==NULL){
    osal_printk("[client]failed to create communication message queue!\r\n");
    return;
}
osal_printk("[client]create communication message queue success!\r\n");

//创建一个消息队列
sensor_data_qid=osMessageQueueNew(SENSOR_DATA_QUEUE_SIZE,sizeof(sensor_data_t),NULL);
if(sensor_data_qid==NULL){
    osal_printk("[client]failed to create sensor message queue!\r\n");
    return;
}
osal_printk("[client]create sensor message queue success!\r\n");


//创建启动传感器任务
osThreadAttr_t sensor_reader_task_attr={
    .name="SensorReader Task",
    .stack_size=SENSOR_TASK_STACK_SIZE,
    .priority=SENSOR_TASK_PRIO
};
if(osThreadNew((osThreadFunc_t)sensor_reader_task_entry,NULL,&sensor_reader_task_attr)==NULL){
    osal_printk("[client]failed to create SensorReader Task!\r\n");
}
else osal_printk("[client]create SensorReader Task Success\r\n");

//创建启动逻辑任务
osThreadAttr_t logic_task_attr={
    .name="Logic Task",
    .stack_size=LOGIC_TASK_STACK_SIZE,
    .priority=LOGIC_TASK_PRIO
};
if(osThreadNew((osThreadFunc_t)logic_task_entry,NULL,&logic_task_attr)==NULL){
    osal_printk("[client]failed to create Logic Task!\r\n");
}
else osal_printk("[client]create Logic Task Success!\r\n");

//创建client端通信任务
osal_task *task_handle = NULL;
osal_kthread_lock();

task_handle = osal_kthread_create((osal_kthread_handler)sle_uart_client_task, 0, "SLEClientTask",
                                  SLE_CLIENT_COMM_TASK_STACK_SIZE);

if (task_handle != NULL) {
    osal_kthread_set_priority(task_handle,SLE_CLIENT_COMM_TASK_PRIO);
    osal_printk("[client]----------------------create client communication thread success!----------------------\r\n");
}
else{
    osal_printk("[client]----------------------create client communication thread failed!----------------------\r\n");
}
osal_kthread_unlock();

}

app_run(smart_kitchen_client_entry);

以下是server端的入口文件application\samples\smart_kitchen\server\server_entry.c
#include "server_entry.h"
#include "cmsis_os2.h"
#include "soc_osal.h"
#include "app_init.h"

#include "/task/communication_task.h"
#include "/task/pwm_task.h"

#define SLE_SERVER_COMM_TASK_STACK_SIZE 0x1000
#define SLE_SERVER_COMM_TASK_PRIO (osPriority_t)(18)
#define PWM_TASK_STACK_SIZE 0x1000
#define PWM_TASK_PRIO (osPriority_t)(17)

//占空比消息队列
osMessageQueueId_t duty_cycle_qid;

static void smart_kitchen_server_entry(void){

//创建一个消息队列
duty_cycle_qid=osMessageQueueNew(DUTY_CYCLE_DATA_QUEUE_SIZE,sizeof(duty_cycle_data_t),NULL);
if(duty_cycle_qid==NULL){
    osal_printk("[server] failed to create duty_cycle message queue!\r\n");
}
osal_printk("[server] create duty_cycle message queue success!\r\n");

//创建通信任务
osal_task *task_handle = NULL;
osal_kthread_lock();

task_handle = osal_kthread_create((osal_kthread_handler)sle_uart_server_task, 0, "SLEServerTask",
                                  SLE_SERVER_COMM_TASK_STACK_SIZE);

if (task_handle != NULL) {
    osal_kthread_set_priority(task_handle, SLE_SERVER_COMM_TASK_PRIO);
}
osal_kthread_unlock();

//创建pwm任务
osThreadAttr_t attr={
    .name="PWMTASK",
    .stack_size=PWM_TASK_STACK_SIZE,
    .priority=PWM_TASK_PRIO
};
if(osThreadNew((osThreadFunc_t)pwm_task,NULL,&attr)==NULL){
    osal_printk("[server] failed to create pwm task!\r\n");
}
osal_printk("[server] create pwm task success!\r\n");

}

app_run(smart_kitchen_server_entry);

以下是同级目录的client端的CMakeLists.txt
application\samples\smart_kitchen\client\CMakeLists.txt
set(SOURCES_LIST
${CMAKE_CURRENT_SOURCE_DIR}/client_entry.c
${CMAKE_CURRENT_SOURCE_DIR}/bsp/bsp_adc_sensor.c
${CMAKE_CURRENT_SOURCE_DIR}/bsp/bsp_indicator.c
${CMAKE_CURRENT_SOURCE_DIR}/bsp/bsp_oled_display.c
${CMAKE_CURRENT_SOURCE_DIR}/bsp/bsp_set_duty_cycle.c
${CMAKE_CURRENT_SOURCE_DIR}/bsp/bsp_sle_uart_init.c
${CMAKE_CURRENT_SOURCE_DIR}/bsp/sle_uart_client.c
${CMAKE_CURRENT_SOURCE_DIR}/task/logic_task.c
${CMAKE_CURRENT_SOURCE_DIR}/task/sensor_reader_task.c
${CMAKE_CURRENT_SOURCE_DIR}/task/communication_task.c
${CMAKE_CURRENT_SOURCE_DIR}/../peripheral/i2c/ssd1306_fonts.c
${CMAKE_CURRENT_SOURCE_DIR}/../peripheral/i2c/ssd1306.c

)

set(PUBLIC_HEADER_LIST
${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/bsp
${CMAKE_CURRENT_SOURCE_DIR}/task
${CMAKE_CURRENT_SOURCE_DIR}/../../peripheral/i2c
${CMAKE_CURRENT_SOURCE_DIR}/../../../../include\middleware\services\bts\sle

)

set(SOURCES "${SOURCES_LIST}" PARENT_SCOPE)
set(PUBLIC_HEADER "${PUBLIC_HEADER_LIST}" PARENT_SCOPE)

可以看到是有编译入口文件application\samples\smart_kitchen\client\client_entry.c的,server端也一样,但是不知道为什么好像没有调用到实际代码中的app_run()函数

三、当前开发板状态全景照片

两个开发板的电源指示灯都亮,各个外设的电源指示灯也都亮

四、开发板串口所有日志

client端的串口如下

boot.
Flash Init Fail! ret = 0x80001341
verify_public_rootkey secure verify disable!
verify_params_key_area secure verify disable!
verify_params_area_info secure verify disable!
verify_image_key_area secure verify disable!
verify_image_code_info secure verify disable!
SSB Uart Init Succ!
SSB Flash Init Succ!
verify_image_key_area secure verify disable!
verify_image_code_info secure verify disable!
Flashboot Uart Init Succ!
Flashboot Malloc Init Succ!
Flash Init Succ!
No need to fix SR!
io level work in hw mode, level[chip]:0x33
flashboot version : 1.10.102
[UPG] upgrade init OK!
No need to upgrade...
flash_encrypt disable.
verify_image_key_area secure verify disable!
verify_image_code_info secure verify disable!
APP|dbg uart init ok.
[UPG] upgrade init OK!
APP|init_sle_mac failed!!!
APP|init_dev_addr, mac_addr:0xb5,0x 0,0x73,0x3e,0x**,0x**,
xo_trim_temp_comp val:0 0
los_at_plt_cmd_register EXCUTE
APP|thread[11] func null
cpu 0 entering scheduler
APP|btc open
[RADAR_LOG] alg ctrl read from nv [1][2][0][0][1][1][20]
device_main_init: 0!
===hal_initialize_phy===226===
device_module_init:: succ!
cali_set_cali_mask:old[0x0] -> new[0x1fa2]

fe_rf_initialize
cali_offline_cali_entry enter
cali_set_cali_done_flag:old[0x0] -> new[0x1]

rf cali OK. time cost:22, ret:0
xo update temp:3,diff:0,xo:0x3083c
APP|[SYS INFO] mem: used:88140, free:277880; log: drop/all[0/0], at_recv 0.
APP|[SYS INFO] mem: used:88140, free:277880; log: drop/all[0/0], at_recv 0.
APP|[SYS INFO] mem: used:88140, free:277880; log: drop/all[0/0], at_recv 0.
APP|[SYS INFO] mem: used:88140, free:277880; log: drop/all[0/0], at_recv 0.
APP|[SYS INFO] mem: used:88140, free:277880; log: drop/all[0/0], at_recv 0.
APP|[SYS INFO] mem: used:88140, free:277880; log: drop/all[0/0], at_recv 0.
APP|[SYS INFO] mem: used:88140, free:277880; log: drop/all[0/0], at_recv 0.
APP|[SYS INFO] mem: used:88140, free:277880; log: drop/all[0/0], at_recv 0.
APP|[SYS INFO] mem: used:88140, free:277880; log: drop/all[0/0], at_recv 0.
APP|[SYS INFO] mem: used:88140, free:277880; log: drop/all[0/0], at_recv 0.
APP|[SYS INFO] mem: used:88140, free:277880; log: drop/all[0/0], at_recv 0.
APP|[SYS INFO] mem: used:88140, free:277880; log: drop/all[0/0], at_recv 0.
APP|[SYS INFO] mem: used:88140, free:277880; log: drop/all[0/0], at_recv 0.
APP|[SYS INFO] mem: used:88140, free:277880; log: drop/all[0/0], at_recv 0.
APP|[SYS INFO] mem: used:88140, free:277880; log: drop/all[0/0], at_recv 0.
APP|[SYS INFO] mem: used:88140, free:277880; log: drop/all[0/0], at_recv 0.
APP|[SYS INFO] mem: used:88140, free:277880; log: drop/all[0/0], at_recv 0.
APP|[SYS INFO] mem: used:88140, free:277880; log: drop/all[0/0], at_recv 0.
APP|[SYS INFO] mem: used:88140, free:277880; log: drop/all[0/0], at_recv 0.

server端的串口如下

boot.
Flash Init Fail! ret = 0x80001341
verify_public_rootkey secure verify disable!
verify_params_key_area secure verify disable!
verify_params_area_info secure verify disable!
verify_image_key_area secure verify disable!
verify_image_code_info secure verify disable!
SSB Uart Init Succ!
SSB Flash Init Succ!
verify_image_key_area secure verify disable!
verify_image_code_info secure verify disable!
Flashboot Uart Init Succ!
Flashboot Malloc Init Succ!
Flash Init Succ!
No need to fix SR!
io level work in hw mode, level[chip]:0x33
flashboot version : 1.10.102
[UPG] upgrade init OK!
No need to upgrade...
flash_encrypt disable.
verify_image_key_area secure verify disable!
verify_image_code_info secure verify disable!
APP|dbg uart init ok.
[UPG] upgrade init OK!
APP|init_sle_mac, mac_addr:0x50,0x56,0x12,0xa8,0x**,0x**,
APP|init_dev_addr, mac_addr:0x50,0x56,0x12,0x25,0x**,0x**,
xo_trim_temp_comp val:0 0
los_at_plt_cmd_register EXCUTE
APP|thread[11] func null
cpu 0 entering scheduler
APP|btc open
[RADAR_LOG] alg ctrl read from nv [1][2][0][0][1][1][20]
device_main_init: 0!
===hal_initialize_phy===226===
device_module_init:: succ!
cali_set_cali_mask:old[0x0] -> new[0x1fa2]

fe_rf_initialize
cali_offline_cali_entry enter
cali_set_cali_done_flag:old[0x0] -> new[0x1]

rf cali OK. time cost:23, ret:0
xo update temp:3,diff:0,xo:0x30014
APP|[SYS INFO] mem: used:88140, free:277880; log: drop/all[0/0], at_recv 0.
APP|[SYS INFO] mem: used:88140, free:277880; log: drop/all[0/0], at_recv 0.
APP|[SYS INFO] mem: used:88140, free:277880; log: drop/all[0/0], at_recv 0.
APP|[SYS INFO] mem: used:88140, free:277880; log: drop/all[0/0], at_recv 0.
APP|[SYS INFO] mem: used:88140, free:277880; log: drop/all[0/0], at_recv 0.
APP|[SYS INFO] mem: used:88140, free:277880; log: drop/all[0/0], at_recv 0.
APP|[SYS INFO] mem: used:88140, free:277880; log: drop/all[0/0], at_recv 0.
APP|[SYS INFO] mem: used:88140, free:277880; log: drop/all[0/0], at_recv 0.
APP|[SYS INFO] mem: used:88140, free:277880; log: drop/all[0/0], at_recv 0.
APP|[SYS INFO] mem: used:88140, free:277880; log: drop/all[0/0], at_recv 0.
APP|[SYS INFO] mem: used:88140, free:277880; log: drop/all[0/0], at_recv 0.
APP|[SYS INFO] mem: used:88140, free:277880; log: drop/all[0/0], at_recv 0.
APP|[SYS INFO] mem: used:88140, free:277880; log: drop/all[0/0], at_recv 0.
APP|[SYS INFO] mem: used:88140, free:277880; log: drop/all[0/0], at_recv 0.
APP|[SYS INFO] mem: used:88140, free:277880; log: drop/all[0/0], at_recv 0.
APP|[SYS INFO] mem: used:88140, free:277880; log: drop/all[0/0], at_recv 0.
APP|[SYS INFO] mem: used:88140, free:277880; log: drop/all[0/0], at_recv 0.
APP|[SYS INFO] mem: used:88140, free:277880; log: drop/all[0/0], at_recv 0.
APP|[SYS INFO] mem: used:88140, free:277880; log: drop/all[0/0], at_recv 0.
APP|[SYS INFO] mem: used:88140, free:277880; log: drop/all[0/0], at_recv 0.

后面都是一直在打印这个内存消息

1 Answers

一个项目只能有一个app_run(),client和server不能同时都写了app_run()然后同时编译进去,用CMakeLists选择性编译。

已解决,实际为顶层的CMakeLists写错了,一直没进入这个项目内