[Bug] 客诉GPIO复位时导致界面全部复位
现象
客户工程:FM33LC046N, PD10配置为OUTPUT,进行复位操作时,封装视图上所有引脚都被复位了。
分析
后台抛出异常
fmsh-mfang-django | --------配置Chip引脚参数configPin------------
fmsh-mfang-django | PinNum=49, GPIOMode=DISABLE, Peripheral=None, FunPin=None, PinConfig=True
fmsh-mfang-django | ERROR:django.request:Internal Server Error: /project/set_pin_func
fmsh-mfang-django | Traceback (most recent call last):
fmsh-mfang-django | File "/usr/local/lib/python3.8/site-packages/django/core/handlers/exception.py", line 34, in inner
fmsh-mfang-django | response = get_response(request)
fmsh-mfang-django | File "/usr/local/lib/python3.8/site-packages/django/core/handlers/base.py", line 115, in _get_response
fmsh-mfang-django | response = self.process_exception_by_middleware(e, request)
fmsh-mfang-django | File "/usr/local/lib/python3.8/site-packages/django/core/handlers/base.py", line 113, in _get_response
fmsh-mfang-django | response = wrapped_callback(request, *callback_args, **callback_kwargs)
fmsh-mfang-django | File "/usr/local/lib/python3.8/site-packages/django/views/generic/base.py", line 71, in view
fmsh-mfang-django | return self.dispatch(request, *args, **kwargs)
fmsh-mfang-django | File "/usr/local/lib/python3.8/site-packages/django/views/generic/base.py", line 97, in dispatch
fmsh-mfang-django | return handler(request, *args, **kwargs)
fmsh-mfang-django | File "/usr/src/app/project/views.py", line 501, in post
fmsh-mfang-django | ret = ChipEntity.configPin(int(pinnum), mode, instance, function, PinConfig=True)
fmsh-mfang-django | File "/usr/src/app/project/ChipObjectManager/ChipObject.py", line 1023, in configPin
fmsh-mfang-django | func_name = arr[1]
fmsh-mfang-django | IndexError: list index out of range
fmsh-mfang-django | [19/Dec/2023 12:42:57] "POST /project/set_pin_func HTTP/1.1" 500 145
fmsh-mfang-django | LoadFromRedis: project:1736969842490650626
关联代码
if PinConfig and (mode in [IO_INPUT, IO_OUTPUT, IO_RESET]):
if pin_obj.getPinAssociated() in ["RCC", "CMU"] and pin_obj.config is not None:
# 如果外设配置中XTHF、XTLF开启,时钟树中选用了他们之一
arr = pin_obj.config.split("_")
peri_name = arr[0]
func_name = arr[1]
clockObj = ClockTreeHelper(self.project_id)
if func_name in ["XTHI", "XTHO", "XT32KI", "XT32KO"] and clockObj.ClockIsUsed(func_name):
return { "ret": False, "message": "%s所开启的外部时钟源已被时钟树选用,无法被复位,请调整时钟树后再试." % instance }
else:
# 同步到时钟树
clockObj.Close_XTLF_XTHF(func_name)
原因
PD10并未配置为XTLF,但pin_obj.getPinAssociated() 居然得到了RCC对象,这可能是历史工程造成的。
解决方案
添加try语句捕获异常不处理;