V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
pigdragon
V2EX  ›  程序员

adi 公司的嵌入式的 demo 程序,c 语言...看了这个函数,我不相信我的眼睛

  •  
  •   pigdragon · 2024-06-06 16:54:37 +08:00 · 2588 次点击
    这是一个创建于 467 天前的主题,其中的信息可能已经有所发展或是发生改变。

    是我魔怔了吧,这个函数判断条件不是无效的么?要这个 if 干嘛?

    ** adi_initialize.c source file generated on August 10, 2018 at 10:27:14.
    **
    ** Copyright (C) 2000-2018 Analog Devices Inc., All Rights Reserved.
    **
    ** This file is generated automatically. You should not modify this source file,
    ** as your changes will be lost if this source file is re-generated.
    */
    
    #include <sys/platform.h>
    
    #include "adi_initialize.h"
    
    extern int32_t adi_initpinmux(void);
    
    int32_t adi_initComponents(void)
    {
    	int32_t result = 0;
    
    
    	if (result == 0) {
    		result = adi_initpinmux(); /* auto-generated code (order:0) */
    	}
    
    	return result;
    }
    
    16 条回复    2024-06-07 00:40:17 +08:00
    flytsuki
        1
    flytsuki  
       2024-06-06 17:06:24 +08:00
    有可能 if 之前有一堆代码,然后需求变更删掉了吧
    azenk
        2
    azenk  
       2024-06-06 17:10:44 +08:00 via Android
    这不是工具自动生成的代码么?不奇怪
    UIXX
        3
    UIXX  
       2024-06-06 17:13:58 +08:00
    这是一种嵌入式工程中表示默认配置的写法。

    对于不同的处理器,这个函数是根据情况来判断执不执行引脚复用初始化,比如在 A 芯片中 if 前面是有形如 result = xxx()的条件判断的,而 B 芯片则不需要。这种写法既满足格式统一,又方便插入调试语句,经常用。

    PS. 工具生成的是引脚复用初始化那部分的内容,不是这个函数。
    pigdragon
        4
    pigdragon  
    OP
       2024-06-06 17:14:51 +08:00
    工具要有模板的吧...按照尚未普及人工智能的情况,模板肯定是人出的
    pigdragon
        5
    pigdragon  
    OP
       2024-06-06 17:16:29 +08:00
    @UIXX
    学习了...
    看来有疑惑要经常问,开口有益
    Panic
        6
    Panic  
       2024-06-06 17:22:29 +08:00
    从软件层面看怎么也应该是再调用一个 result = chip_initComponents 的 chip 专用函数把, 这么写怎么看都不合理. 不过考虑到嵌入式也有全栈, 懂硬件的顺带再写个软件..
    Panic
        7
    Panic  
       2024-06-06 17:24:42 +08:00
    你这个可能是 SDK 版本太老了.
    https://github.com/analogdevicesinc/runtime-sharc-loader/blob/master/SharcBooter/project/sc589/SharcBooter_Core2/system/adi_initialize.c

    int32_t adi_initComponents(void)
    {
    int32_t result = 0;

    result = adi_sec_Init();


    return result;
    }
    rrfeng
        8
    rrfeng  
       2024-06-06 17:29:52 +08:00 via Android
    注释写了 auto generated
    也不奇怪(
    pigdragon
        10
    pigdragon  
    OP
       2024-06-06 17:34:23 +08:00
    @Panic
    基本上无所谓新旧,都有时间戳的,看你贴的链接,你贴的这个代码 2019,我贴的 2018.
    就是前面几位朋友说的,说来说去是软件生成的,通过兼容的模板.
    thorneLiu
        11
    thorneLiu  
       2024-06-06 19:01:36 +08:00 via Android
    实际跑起来编译器应该都能优化掉这个 if 吧
    CEBBCAT
        12
    CEBBCAT  
       2024-06-06 19:37:37 +08:00   ❤️ 1
    @pigdragon #5 比开口更有益的是主动学习。看到是自动生成的代码,去找生成它的软件,找到对应的生成逻辑,看看为什么这样设计,是不是有哪里可以优化,再去提个 PR ,岂不美哉?

    (虽然我从没提过)
    kk2syc
        13
    kk2syc  
       2024-06-06 20:49:36 +08:00
    编译器能优化,但是这样写在不同硬件的时候可以很方便调整对应部分(相当于预留)
    koebehshian
        14
    koebehshian  
       2024-06-06 23:25:06 +08:00
    统一格式 ,如果要调两个函数,第二个就需要 if 判断
    flax5a98aa2
        15
    flax5a98aa2  
       2024-06-07 00:15:46 +08:00
    自动生成的代码只需要保证逻辑等价效率没有折扣就行了,人手动写代码需要考虑的事情就多了
    xiri
        16
    xiri  
       2024-06-07 00:40:17 +08:00
    我做嵌入式的,一般我们的代码会有大量的宏控制、嵌套以适配不同的芯片方案和机型,如果只看某个产品机型的有效代码(删除未开启宏包裹的代码),应该能找到一堆类似这样的场景。
    主要还是为了同时满足多业务需求,让格式尽量统一、保证代码复用吧,说不定这个代码原先也是有宏控制的其他逻辑分支,只不过公开出来去除了不关注的部分。
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1202 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 17:53 · PVG 01:53 · LAX 10:53 · JFK 13:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.