处理lv回调函数抛异常卡死,但还无法正常退出
authorp15692025051 <846603105@qq.com>
Fri, 12 May 2023 02:06:12 +0000 (10:06 +0800)
committerp15692025051 <846603105@qq.com>
Fri, 12 May 2023 02:06:12 +0000 (10:06 +0800)
2.sdk/Helios_SDK/services/microPython/lib/lvgl/src/misc/lv_timer.c
2.sdk/Helios_SDK/services/microPython/ports/quectel/core/main_1.py [new file with mode: 0644]
2.sdk/Helios_SDK/services/microPython/ports/quectel/core/source/modlvgl.c

index d8dd55b..f1cd3f2 100644 (file)
@@ -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 (file)
index 0000000..3a3e886
--- /dev/null
@@ -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()))
+    
+
+
index f6ba184..f34a32a 100644 (file)
@@ -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);