精华内容
下载资源
问答
  • 代码的执行原理

    千次阅读 2020-07-18 10:38:12
    介绍了代码的基本执行原理代码执行的步骤以及执行上下文的工作方式。 希望这些对大家有所帮助。由于是自己学习的总结,所以有不对的地方欢迎指正。

    代码的执行原理

    一、代码段

    什么是代码段:一个script标签就是一个代码段。
    

    JS代码在执行时,是一个代码段一个代码段执行。

    二、代码执行的步骤

    • JS代码在执行时分两个阶段:
    • 1)预编译
    • 2)代码执行
      每一个阶段做的事情是不一样的。
    先了解一下定义变量和声明变量:
        通过var定义变量:var a = 110;   定义 = 声明+赋值
        f();:使用function声明了一个函数;函数名是f  函数值是{};定义了一个函数f()
        通过var声明变量:var a = 110;  说的声明仅仅是说var a   后面是赋值
    

    1)预编译: 提升
    把加var的变量进行提升:变量声明会提升,变量的赋值是不会提升。
    提升是提升到代码段最前面
    把使用function声明的函数进行提升 提升的是整个函数

    2)代码的执行:一行一行执行

    eg:console.log(a); var a = 110; console.log(a);

    • 输出:undefiend 和 110;

    执行步骤: 1)提升:因为a是var进行声明的,所以要进行提升。提升只是提升了声明并没有提升变量的值,所以现在a是undefiend。
    2)执行:第一行代码得到的是a的提升值,所以是undefiend,第二行将值110赋值给了a,所以当前a为number数据类型,值为110。因此第三行代码将a的值110输出。

    三、初步了解执行上下文( Execute Context)

    执行上下文( Execute Context):

    为了方便,以后我们统一将执行上下文简称为:EC

    • EC的作用:给代码提供数据

    代码分两类:

    • 全局代码 函数外面的代码叫全局代码
    • 函数代码 一个函数就是一个局部代码
    • 全局执行上下文:
      全局代码在执行时时,就会产生全局的EC。 EC(G)
      例如:全局执行上下文
    • 局部执行上下文:
      函数代码在执行时,就会产生局部的EC。调用一个函数就产生一个EC,调用100个函数,就产生100个EC。在这里插入图片描述
    • EC栈:
      栈:杯子
      每产生一个EC就会放到杯子中,说白了,就是杯子中放鸡蛋。
      栈:先放进去的后出来
      在这里插入图片描述

    执行上下文详解

    我们知道,当代码执行的时候随之就产生了一个叫执行上下文的东西,也就是他使我们得到了最后的数据。
    但是,执行上下文是怎么执行的呢?让我们一起探究一下吧!
    

    我们知道,当代码进行执行的时候,必然要遵守的规则,于是他必然要经过预编译然后执行。
    (何为预编译前面已经介绍,就不在讲解了。)
    要用到的相关名称:ECStack:(Execute context stack):执行上下文栈
    EC(G)(Execute context (globle):存放全局变量的执行上下文:包含:var 定义的全局变量,引用数据类型)
    **EC(f)😗*函数f执行时产生的执行上下文
    GO(globle object):存放全局对象
    VO(varibale object):var创建的全局变量对象和引用数据类型对象
    AO:var创建的局部数据对象(如果对数据对象不熟悉,可以访问:JS中的数据类型及转换)

    注意:数据在EC(G)中,就一定在GO中,反之不一定

    具体步骤如下:

    • 1、在预编译的时候就产生了一个叫ECStack的大容器,他的里面放了EC(G)。EC(G)中有个VO用来存放提升的数据(提升了的变量的声明)。
    • 2、提升完毕,开始一步步执行代码。
      1)执行代码,给VO里面的变量进行赋值
      2)当调用函数的时候就会产生一个EC(f),每调用一次就产生一个EC(f),步骤:先对函数进行形参的赋值,然后看有没有提升,如果有提升,将其保存在AO中,然后进行执行,如果里面还有函数重复当前步骤。
      看几个例子了解一下吧!在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
    展开全文
  • ARM启动代码原理和分析

    千次阅读 2016-07-10 17:10:51
    RO代码段 ZI未初始化数据段 RW数据段 Load Address加载地址 Execu o n A ddress 执行地址 Stack Pointer栈空间指针 Boot相关硬件 • Flash Rom(可作为bootrom的存储器) Boot相关硬件 Boot相关硬件 Boot...

    内容大纲

    内容关键字:

    映像文件

    RO代码段
    ZI未初始化数据段
    RW数据段
    Load Address加载地址
    Execu o n A ddress 执行地址
    Stack Pointer栈空间指针

    Boot相关硬件

    • Flash Rom(可作为bootrom的存储器)


    Boot相关硬件


    Boot相关硬件

    Boot的主要功能

    • 建立异常向量表
    • 初始化中断
    • 初始化硬件设备

    • 初始化应用程序执行环境

    • 跳转到主应用程序

    初始化硬件
    • 软件的运行离不开硬件,boot必须对硬件进
    行初始化。硬件的初始化主要通过配置特
    殊控制寄存器来完成,包括下面几部分:
    关闭开门狗
    屏蔽所有的中断
    初始化PLL和时钟。

    初始化储存系统

    初始化应用程序的执行环境

    • Elf文件的类型:可执行文件、可重定位文
    件、共享库object(又叫做共享库)文件。
    • Elf文件的功能:
    1、用作链接器的输入生成可执行的映像文件
    2、可装载到内存里运行,完成特定功能的文件。

    elf文件的物理结构

    • Elf文件头
    • Sec o n: .text .d ata .b ss. sym t ab
    • Program header
    • 可重定位文件与可执行文件的区别:
    区与段的概念

    program header


    可执行映像文件的逻辑结构

    由几个可重定位的目标文件的相同属性区组
    成了可执行映像的段,那么段有组成什么?
    在逻辑结构里,段组成了更大的组织:域



    装载域和运行域
    • 域又组成什么呢?当然就是组成可执行文件了,一个映像文件可以包含一到多个域。与看起来有些多余,实际上更为重要的是用域来描述输出区运行前和运行时在存储系统上的位置。所以,域分为装载域和运行域。装载域描述运行前输出段在rom/ram中的分布状态,运行域描述运行时输出段在rom/ram中的分布状态

    • 大多数情况下,映像文件在执行前把它装载到rom中,而当运行时域里 的有些输出段必须复制到ram中,程序才能正常运行,所以,在装载和运行时,有些段处在不同的位置(地址空间)。


    • 由图可以看出,映像文件zi段在装载域里是不存在的,在运行域里才建立的;映像文件在运行时,第一件工作就是把rw输出段复制到ram里的正确位置,第二件工作就是建立zi输出段并初始化为0。这就是应用程序执行环境的初始化。然而,在运行时,代码和数据分布到了不同的地址空间,形成了三个运行域:ro运行域、rw运行域、zi运行域。那么这个过程是如何来实现的?

    • |Image$$RO$$Base|; Base of ROM code
    |Image$$RO$$Limit| ; End of ROM code
    (=start of ROM data)
    |Image$$RW$$Base| ; Base of RAM to
    ini a l ise
    |Image$$ZI$$Base| ; Base and limit of area
    |Image$$ZI$$Limit| ;

    分散装载技术

    • 分散装载技术可以把用户的应用程序分割成多个RO运行域和RW运行域,并且给他们指定不同的地址,这在嵌入式系统的实际应用中有很多的好处。在一个嵌入式系统中,fl a sh 、16位ram、32位ram都可能存在于系统中,所以将不同功能的代码定位于特定的位置上会大大提高系统的运行效率。



    展开全文
  • Java代码生成器原理和编写

    千次阅读 2020-07-21 11:36:15
    代码生成器的原理其实是非常简单的,主要可以分为下面两个步骤: 数据库元数据抓取 模板输出 第一步数据库元数据信息抓取 这里给大家提供些简单易于操作的思路,我们找到数据库连接中的information_schema...

    代码生成器的原理其实是非常简单的,主要可以分为下面两个步骤:

    1. 数据库元数据抓取

    2. 模板输出

     

    第一步数据库元数据信息抓取

    这里给大家提供些简单易于操作的思路,我们找到数据库连接中的information_schema这个库,这个库就是元数据库,保存着其他库以及库表的信息,并且一直维护.

    我们想要做到根据数据库去动态生成代码,那么就需要拿到生成代码的对应的数据库,表,以及字段等信息.下面给大家提供一下获取数据库,获取数据库表,获取数据库表字段的SQL语句

     

    获取连接中的所有数据库

    SELECT SCHEMA_NAME schemaName, DEFAULT_CHARACTER_SET_NAME characterName, DEFAULT_COLLATION_NAME collationName FROM information_schema.SCHEMATA

    获取数据库表

    SELECT table_name tableName,ENGINE,table_comment tableComment,create_time createTime FROM information_schema. TABLES WHERE table_schema = (SELECT DATABASE())

    获取数据库表的列信息

    select column_name columnName, data_type dataType, column_comment columnComment, column_key columnKey, extra from information_schema.columns\n" +
                    " \t\t\twhere table_name = '"+tableName+"' and table_schema = (select database()) order by ordinal_position

     

    现在大家能获取到数据库,数据库表以及列的信息,那么根据一些模板技术是不是可以把这些表信息,列信息输出成文件呢,可以思考一下.

     

    第二步使用模板技术输出文件

    这里我使用apache的velocity模板渲染技术,大家也可以使用freemark之类的模板技术也行.这里我先给羡慕提前准备好我们需要生成的模板,如下:

     

    大家可以看我提前准备了六个模板,每个模板都有一些表达式的存在,这就是在获取表信息和列信息之后,需要填充进去的,然后通过模板技术动态渲染成我们需要的代码.

     

    详细的步骤较为繁琐,大家可以看我的源码,有问题可以在下方提问.

    B/S架构代码: https://gitee.com/lijunnb666/apollo-generator-fast

    C/S架构代码: https://gitee.com/lijunnb666/apollo-generator

    展开全文
  • 超声波测距原理代码实现

    千次阅读 2020-08-16 22:36:27
    超声波测距原理图 : 代码实现: 时间结构体解析: timeval float Measure() { struct timeval t1; //超声波测距结构体,系统自带 struct timeval t2; long start; // 刚开始接受信号 long end; // 最后接受...

    超声波测距原理图 :

    在这里插入图片描述

    代码实现:

    时间结构体解析: timeval

    float Measure()
    {
            struct timeval t1;	//超声波测距结构体,系统自带
            struct timeval t2;
    
            long start;	//	刚开始接受信号
            long end;	//	最后接受信号
            float distance;	
    
            digitalWrite(Trig,LOW);	//	让超声波一开始信号平稳
            delayMicroseconds(2);
    
            digitalWrite(Trig,HIGH);        //发出超声波脉冲,开始测距
            delayMicroseconds(10);
            digitalWrite(Trig,LOW);
    		
    		// 直到发送完信号,开始计时
            while(!(digitalRead(Echo) == 1) );      //获取当前时间,最开始接受到返回信号的时间
            gettimeofday(&t1,NULL);
    		
    		// 信号回来完毕,结束计时,否则阻塞等待
            while(!(digitalRead(Echo) == 0) );      //获取当前时间,最后接受到返回信号的时间
            gettimeofday(&t2,NULL);
    
            start = t1.tv_sec*1000000 + t1.tv_usec;
    
            end   = t2.tv_sec*1000000 + t2.tv_usec;
    
    		// 空气中传播 340 m/s
            distance = (float)(end - start) / 1000000 * 34000 / 2;	//测出信号往返距离
    
            return distance;
    
    }
    

    可供参考大佬的方案 :超声波测距原理

    展开全文
  • DXF转G代码源程序

    2015-08-07 10:37:14
    DXF转G代码源程序 line spline circle arc 比较全
  • R语言igraph包编写网络分析代码原理和代码例子,怎么在中国知网上搜索相关的论文呢。表示自己查不到,有详细的技术路线更好
  • 自己实现的编译原理的LL1语法分析器,是自己的实验作业,用Vs2017实现,可以直接运行,代码注释丰富,希望与大家交流学习!欢迎大家下载!
  • ARM Cortex-M底层技术(二)启动代码原理分析

    千次阅读 多人点赞 2018-03-10 16:13:47
    ARM Cortex-M底层技术(二)Cortex-M启动代码原理分析写在前面的话: 近些年来ARM Cortex-M阵营各厂商(ST、NXP、ATMEL、Freescale……)发布新产品的节奏越来越快,以及微控制器应用普及程度的加深,越来越多的...
  • 代码生成器原理及示例

    万次阅读 2014-11-03 10:16:05
    在三层架构中Model、DAL、BLL...虽然网络已经有成熟的代码生成器,但是掌握代码生成器的编写方法、原理还是很有必要的。下面通过一个例子简要介绍代码生成器编写过程,并给出一个具备基本功能的范例雏形。以抛砖引玉。
  • 一个简单的编辑器 编译原理课设 对简单的程序进行语义分析并将中间代码生成
  • 《编译原理及实现》附录代码 第二版 孙悦红主编,代码是从课本附录扫描识别出来的,然后经过纠错,调试,最终能成功运行,do语句功能未实现,保持课本源代码模样,需要的同学可联系我。
  • SVN工作原理(帮助实现代码管理)

    千次阅读 2016-04-26 15:08:32
    svn工作原理:在svn服务器上每个源代码文件都有一个版本(1、2、3),假设服务器上的代码文件原始版本是1,张三下载下来,修改后这个版本自动+1,变成了2,他把这个2上传到服务器。李四之前也下载了版本为1的这个...
  • UEFI原理与编程源代码

    热门讨论 2015-05-31 17:35:17
    UEFI原理与编程源代码 资源是从华章出版社官网下载的
  • 编译原理及实践附录源代码

    热门讨论 2012-12-05 22:30:17
    编译原理及实践 附录 源代码 本书英文名:Compiler Construction: Principles and Practice 作者:Kenneth C.Louden 电子书中文版下载地址:http://download.csdn.net/detail/bbeikke/4794677 电子书英文版下载地址:...
  • 卡尔曼滤波原理及应用-MATLAB仿真
  • 在线代码编辑器   在线编辑各种文本形式的源代码,如js,html,php等,要支持语法高亮,即时输入即时高亮。  我的初步想法是用一个 contenteditable>来实现,就是类似于常见的在线网页编辑器,但是因为仅仅是...
  • 编译原理课程词法分析器,语法分析器(递归实现),中间代码生成;
  • 学生在学习《编译原理》课程设计中,结合各章节的构造编译程序的基本理论,总共用一周的时间完成课程设计。要求用C或C++语言描述及上机调试,实现五个题目中任意一个,是学生将理论与实际应用结合其,起来,受到软件...
  • 代码生成工具原理解析

    万次阅读 2013-06-06 23:02:26
    前几天在论坛看到jeecg,是个代码自动生成框架,感觉挺有意思的,就花了点时间研究了下。 代码都能自动生成,可能大家会觉得这肯定是个很复杂的东西,其实非也,我给大家稍微点一下 ,相信大家就能明白其中的...
  • 代码混淆的实现原理与方法

    万次阅读 2013-09-02 19:52:15
    由于java和.net这类高层抽象语言,具有 天生的易反汇编 特性,其编译后的程序包包含了大量的源代码变量、函数名、数据结构等信息 根据其编译后的程序包,可以非常容易的得到 近乎源代码质量 的反汇编代码。如果不加...
  • 这是编译原理的实验,关于四则表达式的编译(词法、语法、语义分析,目标代码生成)。里面有实验指导书以及注释详细的源代码。详细请看博客: http://blog.csdn.net/touch_2011/article/details/7019163
  • 编译原理代码优化

    万次阅读 多人点赞 2017-12-18 10:43:49
    编译原理出于代码编译的模块化组装考虑,一般会在语义分析的阶段生成平台无关的中间代码,经过中间代码级的代码优化,而后作为输入进入代码生成阶段,产生最终运行机器平台上的目标代码,再经过一次目标代码级别的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,927,296
精华内容 770,918
关键字:

代码原理

友情链接: 风电场研究1.zip