百行代码解读阿里AloT芯片平台无剑100!【觉醒原创:周五摸鱼系列】时间是否存在?它到底是什么?

百行代码解读阿里AloT芯片平台无剑100!【觉醒原创:周五摸鱼系列】时间是否存在?它到底是什么?(图1)

关注光文明平台,共建星际社区

文章来源:觉醒字幕组

作者 | 马超责编 | 胡巍巍出品 | CSDN(ID:CSDNnews) 
今年以来我国IT厂商都在AIot的底层平台建设方面可谓是捷报频传,在操作系统方面有如像腾讯的Tiny OS、阿里的Ali Things OS3.0纷纷进行了开源;在数据库方面国产的时序库TdEngine在开源后也在GitHub上占据榜首位很久,在芯片方面阿里平头哥半导体公司也有很多大手笔,先是在今年7月底发布的玄铁910处理器,这款CPU基于RISC-V的基础架构,有16个core,使用12nm制程工艺,最高主频2.5GHZ,功耗仅0.2瓦,超越行业主流性能30%。 而在今年刚刚结束的世界互联网大会上,平头哥又现场宣布推出开源的MCU平台:无剑100 Open,包含了玄铁处理器、基础接口、开发环境,OS等。无剑芯片平台希望能把整个芯片的研发周期缩短50%,把开发成本降低50%,被阿里定位为面向下一代的AIoT产品的平台。什么是MCU
MCU(Micro controller Unit)暨微控制单元,又称单片微型计算机(Single Chip Microcomputer )或者单片机,是把CPU、内存、定时器以及主板的大部分接口及总线功能(USB、A/D转换DMA)全部整合在一块芯片上,形成芯片级的计算机,以降低总体成本及功耗,可以在不同的应用场合做不同组合控制。在各类遥控器、汽车、步进马达、机器手等IoT设备上,都可见到MCU的身影。MCU之所以特别适合Alot其主要原因在于多数物联网终端对于性能都没有太高要求,整合相应外设模块,不但节约成本功耗,也不会产生散热问题,特别适合使用all in one理念进行设计。比如本次开源的MCU其CPU、内存及主要外设的规格如下:CPU 部分:32位通用CPU E902

VIC

支持64层中断嵌套每个中断都有独立的优先级

内存

百行代码解读阿里AloT芯片平台无剑100!【觉醒原创:周五摸鱼系列】时间是否存在?它到底是什么?(图2)

64KB ISRAM 和 3×64KB DSRAM外围特性

DMA控制器*1

自我鉴别、理性评论、切勿迷信

16通道

定时器*8

连接在APB0和APB1总线上32位计数宽度支持自由计数和用户自定义计数两种工作模式

GPIO (×1)


大家周末好百行代码解读阿里AloT芯片平台无剑100!【觉醒原创:周五摸鱼系列】时间是否存在?它到底是什么?(图3)【觉醒原创系列】将会从下周开始推送:揭秘远古文明第二季,请期待。
百行代码解读阿里AloT芯片平台无剑100!【觉醒原创:周五摸鱼系列】时间是否存在?它到底是什么?(图4)

The Persistence of Memory 

连接在APB支持32位宽度支持中断生成代码解读平头哥的MCU笔者发现无剑100( Github地址是https://github.com/T-head-Semi/wujian100_open)开源的这一周时间里,我国各大技术社区都只见报道,却没有技术类文章对其源代码进行解读。由此可见全国各界都在在大力呼吁国产芯片跨跃式发展,但是其实整个行业对于芯片方面的知识储备却是不太充足。当我们真的有了开源的芯片却没有技术社区对其进行解读,未免是件憾事。不过要想完整了解MCU芯片的代码,需要具备硬件电路设计、驱动程序及操作系统内核等方方面面的知识,这里笔者仅选取一个侧面带大家来看看这款MCU的定时器是如何工作的。从整体上看计时器或者其它硬件与操作系统的关系如下图:百行代码解读阿里AloT芯片平台无剑100!【觉醒原创:周五摸鱼系列】时间是否存在?它到底是什么?(图5)可以看到用户调用操作系统的服务,而系统服务再调用驱动,驱动再对相应硬件进行操作,以完成功能,哪怕是一个小小的计时器,如果想了解全貌也是相当的不易。不过好在阿里本次开源的比较彻底,上述代码也是一应俱全,下面我们依次展开来为大家解读。硬件逻辑部分
无剑100平台的硬件Verilog描述源码都在https://github.com/T-head-Semi/wujian100_open/blob/master/soc目录下。简单介绍一下Verilog语言,Verilog是一种硬件描述语言,用于从算法级、门级到开关级的多种抽象设计层次的数字系统建模。被建模的数字系统对象的复杂性可以介于简单的门和完整的电子数字系统之间。数字系统能够按层次描述,并可在相同描述中显式地进行时序建模。可以看出Verilog是一种专门用于硬件描述的语言,有一定的编程知识及数字电路基础学习起来并不麻烦,本次要介绍的计时器的硬件源码在https://github.com/T-head-Semi/wujian100_open/blob/master/soc/tim.v,节选一部分代码对大家进行解读:

always@(*)/*Verilog的逻辑一般由alway关键字定义,其中()内部的变量变化时执行下面代码,如果是*则代表所有input发生变化都会解发语句执行*/

begin

    if((psel == 1'b1) && (penable == 1'b1) && (pwrite == 1'b1)) begin/*verilog中的如1'b1,'前面的1代表一位长度,b代表二进制编码,'后面的1代表具体数值,本例中是说psel即选中标志,与penable即可用标志和pwirte即可写标志均为1是进入以下语句*/

        if(paddr[TIMER_ADDR_LHS:2] == TIMER1LC_OFFSET)//如果是timer1的LOADCOUNT的OFFSET

            timer1loadcount_wen = 1'b1;//将timer1的loadcount的event位配置为1

        else

            timer1loadcount_wen = 1'b0; //将timer1的loadcount的event位配置为0

    end

    else

        timer1loadcount_wen = 1'b0; //将timer1的loadcount的event位配置为0

end
读完整个代码后可以总结出计时器的内存映射表如下:名称地址偏移宽度DescriptionTimer1LoadCount0x0032将被装载入Timer1的valueTimer1CurrentValue0x0432Timer1现在的valueTimer1ControlReg0x084Timer1的控制器Timer1_int_clr0x0C1Timer1清中断标志Timer1Int Status0x101Timer1中断状态Timer2LoadCount0x1432将被装载入Timer1的valueTimer2CurrentValue0x1832Timer1现在的valueTimer2ControlReg0x1c4Timer1的控制器Timer2_int_clr0x201Timer1清中断标志Timer2Int Status0x241Timer1中断状态驱动部分无剑100平台的硬件驱动代表均在以下目录:https://github.com/T-head-Semi/wujian100_open/blob/master/sdk/csi_driver/wujian100_open/驱动层一般是既有汇编又有C代码了,我们还是仅关注计时器的驱动,具体如下:https://github.com/T-head-Semi/wujian100_open/blob/master/sdk/csi_driver/wujian100_open/dw_timer.c其中计时器初始化的函数如下:

timer_handle_t csi_timer_initialize(int32_t idx, timer_event_cb_t cb_event)//idx代表计时器的id,cb_event是回调事件
{
    if (idx < 0 || idx >= CONFIG_TIMER_NUM) {
        return NULL;
    }

    uint32_t base = 0u;
    uint32_t irq = 0u;
    void *handler;

    int32_t real_idx = target_get_timer(idx, &base, &irq, &handler);

    if (real_idx != idx) {//合法怕校验
        return NULL;
    }

    dw_timer_priv_t *timer_priv = &timer_instance[idx];//设计timer的优先级
    timer_priv->base = base;
    timer_priv->irq  = irq;//设置硬中断请求优先级
    timer_priv->idx = idx;

    dw_timer_reg_t *addr = (dw_timer_reg_t *)(timer_priv->base);
    timer_priv->timeout = DW_TIMER_INIT_DEFAULT_VALUE;

#ifdef CONFIG_LPM
    csi_timer_power_control(timer_priv, DRV_POWER_FULL);
#endif

    timer_deactive_control(addr);//启用前先禁用
    timer_priv->cb_event = cb_event;

    if (cb_event != NULL) {
        drv_irq_register(timer_priv->irq, handler);//注册硬件优先级
        drv_irq_enable(timer_priv->irq);//启用
    }

    return (timer_handle_t)timer_priv;
}
那么这个驱动又为库文件:https://github.com/T-head-Semi/wujian100_open/blob/master/sdk/libs/libc/clock_gettime.c提供服务,其中clock_timer_init函数会调用csi_timer_initialize函数初始化计时器。具体代码如下:

int clock_timer_init(void)
{
    if (CLOCK_GETTIME_USE_TIMER_ID > CONFIG_TIMER_NUM) {
        return EPERM;
    }

    uint32_t timer_loadtimer;
    timer_handle = csi_timer_initialize(CLOCK_GETTIME_USE_TIMER_ID, timer_cb_fun);

    if (timer_handle == NULL) {
        return -1;
    }

    APB_FREQ = drv_get_timer_freq(CLOCK_GETTIME_USE_TIMER_ID);
    timer_loadtimer = 10 * MILLION; /*10Mus=10s */
    TIMER_LOADCOUNT = timer_loadtimer * (APB_FREQ / MILLION);

    int ret = csi_timer_config(timer_handle, TIMER_MODE_RELOAD);

    if (ret != 0) {
        return -1;
    }

    ret = csi_timer_set_timeout(timer_handle, timer_loadtimer);

    if (ret != 0) {
        return -1;
    }

    unsigned int cv1, cv2;
    csi_timer_get_current_value(timer_handle, &cv1);
    csi_timer_get_current_value(timer_handle, &cv2);

    if (cv2 > cv1) {
        timer_count_rise = 1;
    }

    return 0;
}

内核层面的计时器

由于在硬件计时器数量有限,为避免浪费内核层面一般都使用双链表的方法,为各用户提供软计时器服务。这方面我在之前的文章中介绍过鸿蒙Lite OS的相关机制详见(https://blog.csdn.net/BEYONDMA/article/details/100049796),无剑100内核层面的软计时器与之比较类似,这里就不再赘述了。以上就是笔者对于无剑100MCU计时器代码进行的解读,当然由于芯片层面涉及的知识层面太广,而笔者的水平有限难免有所纰漏,不过总算代表技术社区补上代码解读缺失这方面的遗憾了,也算是达成了心愿。最后对于阿里平头哥将芯片平台开源,反哺技术社区的做法致以敬意。祝我国在这个物联网时代,能在操作系统、数据库和芯片等方面都能做出领先世界的产品。百行代码解读阿里AloT芯片平台无剑100!【觉醒原创:周五摸鱼系列】时间是否存在?它到底是什么?(图6)

百行代码解读阿里AloT芯片平台无剑100!【觉醒原创:周五摸鱼系列】时间是否存在?它到底是什么?(图7)

by Salvador Dalí 

百行代码解读阿里AloT芯片平台无剑100!【觉醒原创:周五摸鱼系列】时间是否存在?它到底是什么?(图8)百行代码解读阿里AloT芯片平台无剑100!【觉醒原创:周五摸鱼系列】时间是否存在?它到底是什么?(图9)

 Part 1 

百行代码解读阿里AloT芯片平台无剑100!【觉醒原创:周五摸鱼系列】时间是否存在?它到底是什么?(图9)百行代码解读阿里AloT芯片平台无剑100!【觉醒原创:周五摸鱼系列】时间是否存在?它到底是什么?(图9)
「时间」随着钟表的滴答声流逝,这是我们再熟悉不过的日常经验,然而事实上,「时间」可能并非宇宙的基本物件?
百行代码解读阿里AloT芯片平台无剑100!【觉醒原创:周五摸鱼系列】时间是否存在?它到底是什么?(图13)

在当今的物理学中,时间是个特别热门的主题。为了寻找统一理论,物理学家必须重新检视非常基本的假设,而其中最基本的几乎就是时间了。

有些物理学家认为时间其实不存在,有些人则认为应该让时间升级而非降级。在这两种观点之间,还有一个有趣的想法:时间存在,但并非是我们察觉到的时间,而是由一个静态的世界浮现出来的。

早在苏格拉底之前,哲学家就曾经辩论这些想法,但现在物理学家把它弄得更具体。有种说法是,时间可以自宇宙的切割中产生。我们察觉到的时间反映了这些切割区块之间的关系。


你在读着这个句子时,很可能会想着「这一刻」(就是现在),也就是正在发生的「当下」。此时此刻似乎很独特,很真实。不管你对过去有多少记忆,对未来如何憧憬,你都活在当下。当然,你阅读刚刚那句话的那一刻已经不再,这句才是当下。换句话说,时间似乎在流动,亦即「当下」也在不断更新。在我们直觉的深处,未来是开放的,直到它成为现在,而过去已被固定住了。时间流动时,这种“过去固定、现在发生、未来开放”的结构不断在时间中前进。这种结构深植于我们的语言、思考和行为中,我们的一生该怎么过正悬于此。
百行代码解读阿里AloT芯片平台无剑100!【觉醒原创:周五摸鱼系列】时间是否存在?它到底是什么?(图14)百行代码解读阿里AloT芯片平台无剑100!【觉醒原创:周五摸鱼系列】时间是否存在?它到底是什么?(图15)

虽然这种想法很自然,我们却无法在科学里找到相应的语言。物理的方程式无法表明哪些事件正在发生,就像一幅没有标记「你在此处」的地图。方程式中没有「现在」,因此也没有时间流。除此之外,我们可以从爱因斯坦的相对论得知,不只是单一的现在不存在,事实上每一刻都同样真实,未来并不比过去开放。

科学对时间的理解,与我们日常生活中对时间的理解有着巨大的鸿沟,这让历史上的思想家大感困惑。一旦物理学家逐渐剥夺我们赋予时间的平常属性,这个鸿沟日益加深。现在,物理时间与经验时间的裂口已深及根基,因为有许多理论物理学家开始认为,时间甚至根本不存在。

时间并非宇宙真实结构的一部份,这种想法刚开始很令人震惊,难以想像它如何说得通。我们所做的每一件事,都是在时间里做的,这个世界就是由时间串起的一连串事件,每个人都可以看到我的头发变白,物体移动之类的事件。我们看到了变动,而这种改变是相对于时间而言的。

少了时间,世界就会全然静止一个没有时间参数的理论,就必须解释:如果世界实际上并没有变动,为什么我们会看到事件的变化?

最近的研究正尝试面对这项挑战虽然时间可能并不存在于最基本的层次,但它可能在较高的结构中产生。这就像桌子虽然是由一堆内部几乎空空如也的粒子所组成,但摸起来还是很结实。固体是粒子集体浮现的性质,因此时间也可能是由世界某些基本组成浮现出来的性质。

「时间乃浮现的性质」,这种想法有可能和一个世纪前的相对论或量子力学同样具有革命性。爱因斯坦曾说,他在构思相对论时,最关键的进展来自于他对时间的重新理解。

m////bh而物理学家在追求统一相对论与量子力学的梦想时,他们相信时间一样是个关键。2008年,基础问题研究院(FQXi)针对「时间的本质」举办征文,有些现代物理学的重量级人士也前来参与。许多人认为统一理论描述的会是个没有时间的世界,有些人则极不愿放弃时间这个概念。不过他们都同意,要在统一理论上有进展,必须先对时间做深入思考。

百行代码解读阿里AloT芯片平台无剑100!【觉醒原创:周五摸鱼系列】时间是否存在?它到底是什么?(图16)
百行代码解读阿里AloT芯片平台无剑100!【觉醒原创:周五摸鱼系列】时间是否存在?它到底是什么?(图9)百行代码解读阿里AloT芯片平台无剑100!【觉醒原创:周五摸鱼系列】时间是否存在?它到底是什么?(图9)

时间的浮沉 

百行代码解读阿里AloT芯片平台无剑100!【觉醒原创:周五摸鱼系列】时间是否存在?它到底是什么?(图9)百行代码解读阿里AloT芯片平台无剑100!【觉醒原创:周五摸鱼系列】时间是否存在?它到底是什么?(图9)
过去这段日子里,我们对时间的丰富常识不断受到否定。时间在物理学中举足轻重,但随着物理学的进展,这些功能逐一被其他东西取代。
乍看之下或许并不明显,不过牛顿的运动定律就对时间的特性有些特定要求,原则上,所有的观察者都会同意事件发生有先后顺序。古典物理假设,不管一个事件发生于何时何地,你都可以客观说明,它跟宇宙中另一件事比较起来,是先发生,后发生,还是同时发生。
因此,时间让世界上所有事件排列得井然有序,而且这个顺序是绝对的事实,不会因观察者的不同而有所改变。还有,时间必须是连续的,这样我们才能定义速度与加速度。
古典物理中的时间,还必须具备持续的概念(也就是物理学家所说的「度量标准」),这样才能判定两个事件相隔多久。
当我们说奥运短跑选手波特(博尔特)每小时可以跑43公里,我们必须能测量一小时是多久。
跟事件的顺序一样,时间持续的长短也是与观察者无关的。如果爱丽丝与鲍伯三点钟离开学校,各走各的,然后六点回到家碰面,那么爱丽丝所经历的时间会等于鲍伯所经历的时间。
百行代码解读阿里AloT芯片平台无剑100!【觉醒原创:周五摸鱼系列】时间是否存在?它到底是什么?(图21)
基本上,牛顿提议这个世界里有个主计时器,它将这世界以唯一且客观的方式切出某一瞬间,牛顿的物理仅依这座钟的滴答声行走。此外,牛顿觉得时间在流动,其流向告诉我们哪一个方向是未来,不过,这个额外的性质并非牛顿的运动定律必须具备的。
对现代的我们来说,牛顿对时间的诠释可能已经过时了,但稍微想一下,会发现它很令人惊讶它的许多特征在逻辑上都是不相关的,诸如:顺序,连续性,持续性,同时性,流动与方向,然而它们全被兜在牛顿称为「时间」的这个主计时器里。这些特征组合运作得很成功,所以历经近两个世纪都没受到修正。
19世纪末,20世纪初,攻击来了。第一波是奥地利物理学家玻尔兹曼的研究,他推论,由于牛顿定律在时间里往前或往后都同样可行,所以时间并没有内建方向。
因此,他提议过去与未来的差别不是时间固有的,而是起源于宇宙以不对称的方式在组织物质。物理学家仍在争论这种说法的细节,不过波兹曼已经很有说服力地拿掉了牛顿时间里的一项特征。百行代码解读阿里AloT芯片平台无剑100!【觉醒原创:周五摸鱼系列】时间是否存在?它到底是什么?(图22)

熵-时间箭头-玻尔兹曼

下一波攻击来自爱因斯坦,他摒弃了绝对同时性的概念。根据他的狭义相对论,事件是否同时发生与你跑多快有关。事件发生的舞台并非时间或空间,而是两者的合体。时空两位观察者若以不同速度移动,对一个事件在何时,何处发生,会有不同观点,但对其在时空里的位置则没有歧见时间与空间是次级的概念,如同爱因斯坦的大学老师,数学家闵考夫斯基(赫尔曼·闵可夫斯基)的名言:「这两者必将淡出成为幻影。」

到了1915年年,爱因斯坦的广义相对论出现,狭义相对论也被推广到重力的领域,此时事情变得更糟。重力会扭曲时间,所以这里经过的一秒和那里经过的一秒可能不相同。能让时钟同步并持续保持同步,原则上也十分罕见。你无法将这个世界想像成是根据单一时间参数,滴答滴答地逐一开展出来。在极端的情况下,这个世界可能根本没办法被切割成一个个瞬间。如此一来,就不可能说一个事件比另一个事件发生得早或晚了。百行代码解读阿里AloT芯片平台无剑100!【觉醒原创:周五摸鱼系列】时间是否存在?它到底是什么?(图23)广义相对论里有许多函数会用到「时间」一词:座标时间,局部时间(适当的时候,又称「原时」),全域时间总的来说,它们执行了许多牛顿的单一时间所做的事,但个别来说,没有一个配得上这个名词。要不就是物理不听从这些时钟,或者是即使听从,这些时钟也只适用于宇宙里的一小块区域或特定的观察者。

虽然现在的物理学家认为时间应该要从统一理论中剔除,但我们很有理由说,时间自1915年就消失了,只是我们尚未完全领悟到这件事。
百行代码解读阿里AloT芯片平台无剑100!【觉醒原创:周五摸鱼系列】时间是否存在?它到底是什么?(图9)百行代码解读阿里AloT芯片平台无剑100!【觉醒原创:周五摸鱼系列】时间是否存在?它到底是什么?(图9)

 量子时间 

百行代码解读阿里AloT芯片平台无剑100!【觉醒原创:周五摸鱼系列】时间是否存在?它到底是什么?(图9)百行代码解读阿里AloT芯片平台无剑100!【觉醒原创:周五摸鱼系列】时间是否存在?它到底是什么?(图9)目前现代物理最远大的目标之一,就是统合广义相对论与量子力学,建造一个既能处理重力,又能处理物质量子特性的单一理论:量子重力论不过会遇到的障碍是,量子力学所要求的时间特性和我上面所讲的互相牴触。
根据量子力学,物体展现的行为其实比位置或速度这些古典量所能描述的特性要丰富得多。对一个物体的完整描述,要用到「量子态」这样的数学函数。量子态会在时间中连续演变,而物理学家借着它,可以计算任何实验结果发生在任一时刻的机率。如果我们将一个电子送进一个装置,让它向上或向下偏折,量子力学无法确切告诉我们它会怎么偏折,只能预测发生机率。例如,电子向上偏折的机率是25%,向下偏折的机率是75%。具有相同量子态的两个系统可能产生不同的结果实验。结果是跟机率有关的。
百行代码解读阿里AloT芯片平台无剑100!【觉醒原创:周五摸鱼系列】时间是否存在?它到底是什么?(图28)

要以理论预测机率,时间得有一些特性。

首先,有时间才有可能产生冲突。一颗骰子的5跟3不可能在同一时间朝上,这得在不同时间才会发生。还有,六个面分别朝上的机率总和必须是100%,否则机率的概念便失去意义,而这个机率总和也是在同一时间各事件的发生率相加而来。同样的道理也适用于分析量子粒子出现在某一位置或具有某一动量的机率。

标签: 时序计时器

随便看看