立即注册

扫一扫,访问微社区

micropython-microbit 中文社区

查看: 170|回复: 1

ESP32 loboris固件 _thread产生stack overflow导致CPU halted

[复制链接]

该用户从未签到

发表于 2019-1-11 04:01:41 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

复制代码
def oled_update():
    """Refreshing OLED Display
    """
    oled_text_dict = dict()
    while True:
        status = pump.get_status()
        # OLED display text depending on status
        if status == 'off':
            mmhg = str(int(pump.get_target_mmhg()))
            lipo = str(int(battery.get_lipo_level()))
            oled_text_dict['line1'] = 'Standby...                '
            oled_text_dict['line2'] = '--------------------------'
            oled_text_dict['line3'] = 'Set: ' + mmhg + ' mmHg                  '
            oled_text_dict['line4'] = 'Battery: ' + lipo + '%                '
        elif status == 'on':
            timer = str(pump.pump_timer_output_format())
            mmhg = str(int(pump.get_target_mmhg()))
            p_mmhg = str(int(p_sensor.read_mmhg()))
            oled_text_dict['line1'] = timer  # Output duration to HH:MM:SS
            oled_text_dict['line2'] = '--------------------------'
            oled_text_dict['line3'] = 'Set: ' + mmhg + ' mmHg                  '
            # Pressure is measured as often as the main loop function is called
            oled_text_dict['line4'] = 'Now: ' + p_mmhg + ' mmHg                 '

        # Show text on OLED
        display = oled.show(oled_text_dict)
        utime.sleep_ms(20)



oled_th = _thread.start_new_thread("OLED", oled_update, ())



以上是_thread和其调用的循环

下面是oled class。现在的问题是会不规律出现OLED thread stack overflow的问题,导致死机。出现问题的时间点通常是status = pump.get_status()这句的返回值发生变化(一个按钮触发不同的status),但发生问题没有规律,有时按2下就死机了,有时十多下都没问题。求教!

class OLED:
    def __init__(self, scl_pin, sda_pin):
        from ssd1306 import SSD1306_I2C
        #import freesans20
        import tahoma16
        from writer import Writer

        WIDTH = const(128)
        HEIGHT = const(64)

        i2c = machine.I2C(scl=scl_pin, sda=sda_pin, speed=400000)
        ssd = SSD1306_I2C(WIDTH, HEIGHT, i2c)

        #wri = Writer(ssd, freesans20, verbose=True)
        wri = Writer(ssd, tahoma16, verbose=True)
        Writer.set_clip(True, True)

        self.Writer = Writer
        self.wri = wri
        self.ssd = ssd


    def show(self, text_dict):
        line1 = str(text_dict.get('line1')) + '\n'
        line2 = str(text_dict.get('line2')) + '\n'
        line3 = str(text_dict.get('line3')) + '\n'
        line4 = str(text_dict.get('line4')) + '\n'

        pos = self.Writer.set_textpos(0, 0)
        self.wri.printstring(line1)
        self.wri.printstring(line2)
        self.wri.printstring(line3)
        self.wri.printstring(line4)

        self.ssd.show()



手机扫码浏览
回复

使用道具 举报

  • TA的每日心情
    奋斗
    2019-3-28 11:17
  • 签到天数: 7 天

    [LV.3]偶尔看看II

    发表于 2019-1-11 09:40:33 | 显示全部楼层
    有占用内存太多的代码,如果ram不足,会出现很多奇怪的问题
    回复 支持 反对

    使用道具 举报

    游客
    回复
    您需要登录后才可以回帖 登录 | 立即注册

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|micropython-microbit 中文社区 ( 鄂ICP备17012469号 )

    GMT+8, 2019-4-19 16:49 , Processed in 0.107685 second(s), 21 queries .

    Powered by Discuz! X3.4

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表