Skip to content

GitLab

  • Projects
  • Groups
  • Snippets
  • Help
    • Loading...
  • Help
    • Help
    • Support
    • Submit feedback
    • Contribute to GitLab
  • Sign in
M
mfang2.0
  • Project overview
    • Project overview
    • Details
    • Activity
    • Releases
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 92
    • Issues 92
    • List
    • Boards
    • Labels
    • Service Desk
    • Milestones
  • Merge Requests 1
    • Merge Requests 1
  • CI / CD
    • CI / CD
    • Pipelines
    • Jobs
    • Schedules
  • Analytics
    • Analytics
    • CI / CD
    • Repository
    • Value Stream
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Members
    • Members
  • Collapse sidebar
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
  • 魔方Web开发组
  • mfang2.0
  • Issues
  • #11

Closed
Open
Opened May 19, 2021 by 宋永裕@songyongyu💬
  • Report abuse
  • New issue
Report abuse New issue

python后端:UART先设置为双工再设为仅发送,下载工程时报错

原始代码

            if item["status"] != "DISABLE" and item["pin"]:
                #需要新增GPIO记录
                pinParamDict = PinConfigManager.BuildPin(item)
                PinConfigManager.CreateObject(project_id=project_id, 
                                                pin_number=int(item["pin"]), 
                                                peripheral=item["enablePeripheral"],
                                                config=item["config"],
                                                status=item["status"],
                                                pin_param=pinParamDict)
            elif item["status"] == "DISABLE" and item["pin"]:
                #需要删除GPIO记录
                PinConfigManager.DeletePara(pin_number=int(item["pin"]), 
                                            project_id=project_id)

item参数

{
  "ret": True,
  "pin": 9,
  "status": "PERIPH",
  "config": "LPUART0_TX",
  "peripheral": "GPIOA_3",
  "enablePeripheral": "LPUART0",
  "disablePeripheral": None,
  "beforConfig": "LPUART0_TX",
  "mode": "DIGITAL",
  "remap": True,
  "haspin": True
}

PinConfigManager.BuildPin函数

   @staticmethod
    def  BuildPin(pin,extern_member = None):
        def swap(bool,extern_member):
            if bool:
                return "FL_ENABLE"
            else:
                return "FL_DISABLE"

        if pin["ret"] == True and pin.get("haspin",False) is not True:
            mypin = deepcopy(PIN_TEMP)
            port, pinnum = pin["peripheral"].split("_")
            mypin["GPIO_Type"] = port
            mypin["FL_GPIO_InitTypeDef"]["pin"] = "FL_GPIO_PIN_"+pinnum
            mypin["FL_GPIO_InitTypeDef"]["mode"] = MODE_TEMP[pin["mode"]]
            mypin["FL_GPIO_InitTypeDef"]["remapPin"] = swap(pin["remap"],extern_member)
            mypin["FL_GPIO_InitTypeDef"]["pull"] = swap(False,extern_member)
            ext = EXTERN_GPIO.get(extern_member,False)
            if ext:
                mypin["FL_GPIO_InitTypeDef"][ext["member"]] = ext["defaultval"]
            return mypin
        else:
            return None

问题分析

如果先启用双工,再改为仅发送,则其中一个GPIO是有记录的,此时item中haspin=True,到PinConfigManager.BuildPin中发现haspin为True,返回None,结果把数据库记录中的pin_parm值替换为了None,导致回传GPIO信息和下载工程过程python端报错。

解决方案

增添判断条件来确定是否要新增GPIO记录

if item["status"] != "DISABLE" and item["pin"]:
改为
if item["status"] != "DISABLE" and item["pin"] and item.get("haspin", False) == False:
Edited May 19, 2021 by 宋永裕
Assignee
Assign to
MFangV2.0平台端午前上线
Milestone
MFangV2.0平台端午前上线
Assign milestone
Time tracking
None
Due date
None
0
Labels
None
Assign labels
  • View project labels
Reference: fmsh-web-develop/mfang2.0#11