From: p15692025051 <846603105@qq.com> Date: Fri, 12 May 2023 02:06:12 +0000 (+0800) Subject: 处理lv回调函数抛异常卡死,但还无法正常退出 X-Git-Url: http://git.snicker.com.cn/Users/apple/Desktop/static/gitweb.css?a=commitdiff_plain;h=67a54a9a9b097bd1477df529c6df7c718c4e85e7;p=mirrors%2FASR1603_G5.git 处理lv回调函数抛异常卡死,但还无法正常退出 --- diff --git a/2.sdk/Helios_SDK/services/microPython/lib/lvgl/src/misc/lv_timer.c b/2.sdk/Helios_SDK/services/microPython/lib/lvgl/src/misc/lv_timer.c index d8dd55b7..f1cd3f29 100644 --- a/2.sdk/Helios_SDK/services/microPython/lib/lvgl/src/misc/lv_timer.c +++ b/2.sdk/Helios_SDK/services/microPython/lib/lvgl/src/misc/lv_timer.c @@ -59,26 +59,28 @@ void _lv_timer_core_init(void) /*Initially enable the lv_timer handling*/ lv_timer_enable(true); } - +#include "helios_debug.h" +#define QPY_LVGL_LOG(msg, ...) custom_log(lvgl, msg, ##__VA_ARGS__) /** * Call it periodically to handle lv_timers. * @return the time after which it must be called again */ LV_ATTRIBUTE_TIMER_HANDLER uint32_t lv_timer_handler(void) { - TIMER_TRACE("begin"); + QPY_LVGL_LOG("begin"); /*Avoid concurrent running of the timer handler*/ static bool already_running = false; if(already_running) { - TIMER_TRACE("already running, concurrent calls are not allow, returning"); - return 1; + QPY_LVGL_LOG("already running, concurrent calls are not allow, returning"); + //return 1; } already_running = true; if(lv_timer_run == false) { already_running = false; /*Release mutex*/ - return 1; + QPY_LVGL_LOG("lv_timer_run, concurrent calls are not allow, returning"); + //return 1; } static uint32_t idle_period_start = 0; @@ -91,7 +93,7 @@ LV_ATTRIBUTE_TIMER_HANDLER uint32_t lv_timer_handler(void) run_cnt++; if(run_cnt > 100) { run_cnt = 0; - LV_LOG_WARN("It seems lv_tick_inc() is not called."); + QPY_LVGL_LOG("It seems lv_tick_inc() is not called."); } } @@ -141,7 +143,7 @@ LV_ATTRIBUTE_TIMER_HANDLER uint32_t lv_timer_handler(void) already_running = false; /*Release the mutex*/ - TIMER_TRACE("finished (%d ms until the next timer call)", time_till_next); + QPY_LVGL_LOG("finished (%d ms until the next timer call)", time_till_next); return time_till_next; } diff --git a/2.sdk/Helios_SDK/services/microPython/ports/quectel/core/main_1.py b/2.sdk/Helios_SDK/services/microPython/ports/quectel/core/main_1.py new file mode 100644 index 00000000..3a3e886b --- /dev/null +++ b/2.sdk/Helios_SDK/services/microPython/ports/quectel/core/main_1.py @@ -0,0 +1,216 @@ + + + +class App(object): + def __init__(self): + self.managers = [] + + def append_manager(self, manager): + if isinstance(manager, Abstract): + manager.post_processor_after_instantiation() + self.managers.append(manager) + return self + + def start(self): + for manager in self.managers: + manager.post_processor_before_initialization() + manager.initialization() + manager.post_processor_after_initialization() + + +class watchApp(App): + def __init__(self): + super(watchApp, self).__init__() + self.__ui = None + + def set_ui(self, ui): + self.__ui = ui + + def start(self): + if self.__ui is not None: + self.__ui.start() + super().start() + + + +if __name__ == '__main__': + import uos + import ql_fs + import utime + if ql_fs.path_exists("/ext") == False: + ldev = uos.VfsLfs1(32, 32, 32, "ext_fs",0,3) + uos.mount(ldev,'/ext') + res = uos.statvfs("/ext") + res = list(res) + print('总ext空间:{} MB,剩余空间:{} MB'.format((((res[0] * res[2]) / 1024 / 1024)),((res[0] * res[3]) / 1024 / 1024))) + print("init1:{}".format(utime.localtime())) + import EventMesh + from common import Abstract + print("init2:{}".format(utime.localtime())) + from lcd import tp_cst816 + print("init3:{}".format(utime.localtime())) + + from ui_main_menu import MainMenuScreen + # from ui_WatchFaceScreen import WatchFaceScreen + + from appFactoryMode import FactoryModeLocationScreen,FactoryModeScreen + import ui as _ui + # import ui as _ui + print("init4:{}".format(utime.localtime())) + ui = _ui.UI() + ui.post_processor_after_instantiation() + ui.add_screen(MainMenuScreen()) + EventMesh.publish("load_screen", {"screen": "main_menu"}) + print("init5:{}".format(utime.localtime())) + + ui.add_screen(_ui.PopupScreen()) + ui.add_screen(_ui.PhoneScreen()) + ui.add_screen(_ui.HeartrateScreen()) + import ui_setting as _ui_setting + ui.add_screen(_ui_setting.SettingScreen()) + ui.add_screen(_ui.ToolboxScreen()) + ui.add_screen(_ui.StepScreen()) + ui.add_screen(_ui.CountdownScreen()) + ui.add_screen(_ui.StopwatchScreen()) + ui.add_screen(_ui.WeatherScreen()) + ui.add_screen(_ui.Spo2Screen()) + ui.add_screen(_ui.TemperatureScreen()) + ui.add_screen(_ui.ContactsScreen()) + from ext.appWechat import WechatScreen,TK_ProtoCol,MESSAGE_ProtoCol,NewWechatPopupScreen + ui.add_screen(WechatScreen()) + from alarm import ClkListScreen,ClockManager,NewEditClk,CLKTimeScreen,ClkPeriod,PopupAlarmScreen + ui.add_screen(ClkListScreen()) + ui.add_screen(_ui.CountdownEndScreen()) + ui.add_screen(NewEditClk()) + ui.add_screen(CLKTimeScreen()) + ui.add_screen(ClkPeriod()) + + # ui.add_screen(_ui_setting.LanguageScreen()) + ui.add_screen(_ui_setting.DialswitchScreen()) + # ui.add_screen(_ui.ThemeswitchScreen()) + ui.add_screen(_ui_setting.ImeiScreen()) + ui.add_screen(_ui_setting.AppScreen()) + ui.add_screen(_ui_setting.BrightnessScreen()) + ui.add_screen(_ui_setting.VolumeScreen()) + ui.add_screen(_ui_setting.RestoreScreen()) + ui.add_screen(_ui_setting.PoweroffScreen()) + ui.add_screen(_ui_setting.VersionScreen()) + ui.add_screen(_ui_setting.UpdateScreen()) + ui.add_screen(_ui_setting.AlarmvolumeScreen()) + ui.add_screen(_ui_setting.MsgvolumeScreen()) + ui.add_screen(_ui_setting.PhoneringScreen()) + ui.add_screen(_ui_setting.totalvolumeScreen()) + ui.add_screen(_ui_setting.PoweroffConfirmScreen()) + ui.add_screen(_ui.DialingScreen()) + ui.add_screen(_ui.CallLogScreen()) + from appAlipay import Alipay ,AlipayOpenScreen,Alipay_1_1,Alipay_invite,Alipay_inviting,\ + Alipay_success,Alipay_paycode,Alipay_pay_success,Alipay_collect,Alipay_parent + ui.add_screen(AlipayOpenScreen()) + ui.add_screen(Alipay_1_1()) + ui.add_screen(Alipay_invite()) + ui.add_screen(Alipay_inviting()) + ui.add_screen(Alipay_success()) + ui.add_screen(Alipay_paycode()) + ui.add_screen(Alipay_pay_success()) + ui.add_screen(Alipay_collect()) + ui.add_screen(Alipay_parent()) + ui.add_screen(_ui.UIFINDScreen()) + ui.add_screen(_ui.MsgDetailScreen()) + ui.add_screen(_ui.IncomingCallScreen()) + ui.add_screen(_ui.OnCallScreen()) + ui.add_screen(_ui.MessageFullScreen()) + # ui.add_screen(_ui.PowerOnScreen()) + ui.add_screen(FactoryModeLocationScreen()) + ui.add_screen(FactoryModeScreen()) + ui.add_screen(PopupAlarmScreen()) + ui.add_screen(_ui.LowPowerScreen()) + ui.add_screen(_ui.NewMessageScreen()) + ui.add_screen(NewWechatPopupScreen()) + # ui.add_screen(_ui.Setting3Screen()) + print("init6:{}".format(utime.localtime())) + + + from protocol import LK_ProtoCol,PING_ProtoCol,HEART_ProtoCol,OXYGEN_ProtoCol,OXYGEN_One_ProtoCol,HRSTART_ProtoCol,CENTER_ProtoCol,UPLOAD_ProtoCol,\ + TEMP_ProtoCol,DLT_ProtoCol,WT_ProtoCol,UD_ProtoCol,REMIND_ProtoCol, CR_ProtoCol,KA_ProtoCol,FIND_ProtoCol,POWEROFF_ProtoCol,\ + ProtoColResolver,PHL_ProtoCol,MONITOR_ProtoCol,bootoff_ProtoCol + import ext.mgr as mgr + print("init7:{}".format(utime.localtime())) + + from ext.mgr import ConfigStoreManager, LocationManager, SockManager,getVolumSizeManager,gethistoryDataManager,getUpLoadDataManager, \ + NetManager,AddrBookManager,MsgdetailManager,PhoneCallingManager,getStorageDataManager,getBrightnessManager,getHrTimeManager + print("init8:{}".format(utime.localtime())) + + + #from ui_WatchFaceScreen import WatchFaceScreen + + + # from usr.test_sms import HRSTART_ProtoCol,getHrTimeManager,HEART_ProtoCol,OXYGEN_ProtoCol,OXYGEN_One_ProtoCol,getBrightnessManager,\ + # getStorageDataManager + print("init9:{}".format(utime.localtime())) + #from usr.ui_wechat import WechatScreen,TK_ProtoCol + + print("init10:{}".format(utime.localtime())) + + + app = watchApp() + app.set_ui(ui) + app.append_manager(mgr.AlarmVolumeLevelManager()) \ + .append_manager(mgr.MsgVolumeLevelManager()) \ + .append_manager(mgr.PhoneVolumeLevelManager()) \ + .append_manager(mgr.DeviceInfoManager()) \ + .append_manager(mgr.BatteryManager()) \ + + # .append_manager(mgr.StopwatchManager()) \ + # .append_manager(mgr.CountdownManager()) \ + + app.append_manager(Alipay()) + app.append_manager(ConfigStoreManager()) + app.append_manager(NetManager()) + app.append_manager(LocationManager()) + app.append_manager(AddrBookManager()) + app.append_manager(mgr.MsgManager()) + app.append_manager(MsgdetailManager()) + app.append_manager(mgr.CallLogManager()) + app.append_manager(mgr.getWeatherDataManager()) + app.append_manager(PhoneCallingManager()) + app.append_manager(ClockManager()) + app.append_manager(gethistoryDataManager()) + app.append_manager(getHrTimeManager()) + app.append_manager(getBrightnessManager()) + app.append_manager(getStorageDataManager()) + app.append_manager(getUpLoadDataManager()) + app.append_manager(getVolumSizeManager()) + + print("init11:{}".format(utime.localtime())) + pcr = ProtoColResolver() + pcr.add_support(LK_ProtoCol()) + pcr.add_support(PING_ProtoCol()) + pcr.add_support(KA_ProtoCol()) + pcr.add_support(UD_ProtoCol()) + pcr.add_support(CR_ProtoCol()) + pcr.add_support(FIND_ProtoCol()) + pcr.add_support(POWEROFF_ProtoCol()) + pcr.add_support(PHL_ProtoCol()) + pcr.add_support(TK_ProtoCol()) + pcr.add_support(MESSAGE_ProtoCol()) + pcr.add_support(WT_ProtoCol()) + pcr.add_support(REMIND_ProtoCol()) + pcr.add_support(HRSTART_ProtoCol()) + pcr.add_support(HEART_ProtoCol()) + pcr.add_support(OXYGEN_ProtoCol()) + pcr.add_support(OXYGEN_One_ProtoCol()) + pcr.add_support(TEMP_ProtoCol()) + pcr.add_support(DLT_ProtoCol()) + pcr.add_support(UPLOAD_ProtoCol()) + pcr.add_support(MONITOR_ProtoCol()) + # pcr.add_support(CENTER_ProtoCol()) + pcr.add_support(CENTER_ProtoCol()) + pcr.add_support(bootoff_ProtoCol()) + sm = SockManager() + sm.add_support_resolver(pcr) + app.append_manager(sm) + app.start() + print("init12:{}".format(utime.localtime())) + + + diff --git a/2.sdk/Helios_SDK/services/microPython/ports/quectel/core/source/modlvgl.c b/2.sdk/Helios_SDK/services/microPython/ports/quectel/core/source/modlvgl.c index f6ba1841..f34a32a7 100644 --- a/2.sdk/Helios_SDK/services/microPython/ports/quectel/core/source/modlvgl.c +++ b/2.sdk/Helios_SDK/services/microPython/ports/quectel/core/source/modlvgl.c @@ -26674,7 +26674,7 @@ typedef struct{ // lv_fs_file_t font_f; // lv_fs_res_t font_res; // uint32_t font_resCount; - uint8_t __g_font_buf[1024];//如bin文件存在SPI FLASH可使用此buff + uint8_t __g_font_buf[1024];//ÈçbinÎļþ´æÔÚSPI FLASH¿ÉʹÓôËbuff }user_font_t; //forrest.liu@20230217 add for test @@ -26829,7 +26829,7 @@ static uint8_t bin_find_index(char *bin_name) } static uint8_t *__user_font_getdata(user_font_t *font_user, int offset, int size){ - //如字模保存在SPI FLASH, SPIFLASH_Read(__g_font_buf,offset,size); + //Èç×ÖÄ£±£´æÔÚSPI FLASH, SPIFLASH_Read(__g_font_buf,offset,size); /*if(0 == font_mutex1) { font_mutex1 = Helios_Mutex_Create(); } @@ -27057,7 +27057,7 @@ typedef struct{ lv_fs_file_t font_f; lv_fs_res_t font_res; uint32_t font_resCount; - uint8_t __g_font_buf[1024];//如bin文件存在SPI FLASH可使用此buff + uint8_t __g_font_buf[1024];//ÈçbinÎļþ´æÔÚSPI FLASH¿ÉʹÓôËbuff }user_font_t; @@ -27082,7 +27082,7 @@ static void get_bin_header(char *bin_name,x_header_t *header) // static uint8_t fontisopen = 0; static uint8_t *__user_font_getdata(user_font_t *font_user, int offset, int size){ - //如字模保存在SPI FLASH, SPIFLASH_Read(__g_font_buf,offset,size); + //Èç×ÖÄ£±£´æÔÚSPI FLASH, SPIFLASH_Read(__g_font_buf,offset,size); if(0 == font_mutex1) { font_mutex1 = Helios_Mutex_Create(); } @@ -29869,19 +29869,21 @@ STATIC MP_DEFINE_CONST_LV_FUN_OBJ_STATIC_VAR(mp_lv_dpx_obj, 1, mp_lv_pct, lv_dpx } nlr_buf_t nlr; nlr.ret_val = NULL; + Helios_Mutex_Lock(lv_handler_mutex, HELIOS_WAIT_FOREVER); + MP_THREAD_GIL_ENTER(); if (nlr_push(&nlr) == 0) { + MP_THREAD_GIL_EXIT(); Helios_msleep(40); + MP_THREAD_GIL_ENTER(); if(lv_img_update_flag == 0) { - Helios_Mutex_Lock(lv_handler_mutex, HELIOS_WAIT_FOREVER); - MP_THREAD_GIL_ENTER(); lv_task_handler(); - MP_THREAD_GIL_EXIT(); - Helios_Mutex_Unlock(lv_handler_mutex); } nlr_pop(); } else { mp_obj_print_exception(&mp_plat_print, MP_OBJ_FROM_PTR(nlr.ret_val)); - } + } + MP_THREAD_GIL_EXIT(); + Helios_Mutex_Unlock(lv_handler_mutex); } return; @@ -30807,6 +30809,7 @@ STATIC mp_obj_t mp_lv_block(size_t mp_n_args, const mp_obj_t *mp_args) { lv_tick_inc_start(); } } + QPY_LVGL_LOG("mp_lv_block end\n"); return mp_const_none; } STATIC MP_DEFINE_CONST_LV_FUN_OBJ_STATIC_VAR(mp_lv_block_obj, 1, mp_lv_block, NULL);