首页
学习
活动
专区
圈层
工具
发布

MCU在执行main之前做了什么?

在MCU复位后,程序计数器(PC)会指向相应的复位向量,并开始执行启动代码(startup code)。...最终,在启动过程的最后阶段,会通过调用__call_main来跳转到main函数,从而开始执行主程序。 MCU启动过程 MCU启动过程指的是从MCU复位到main函数之前的过程。...然而,若需要手动对MSP进行赋值(例如在bootloader跳转到application时需要手动为application设置MSP值),则需要在启动代码的起始部分执行这一操作。...IAR默认的启动代码是在链接(link)过程中由链接器自动添加的。如果需要手动进行MSP赋值等操作,这些代码可以在启动代码的最开始部分进行添加。...需要注意的是,__low_level_init函数在全局和静态变量初始化之前执行,因此其中不能使用这些全局和静态变量。

2.1K31

在main方法之前,到底执行了什么?

本人在做接口测试的时候,需要用一个公共类来把所有的执行的代码,然后这个公共类有hsot和hosttype等属性来区分各个测试环境,然后在去不同的地方取用例和请求接口。...中间遇到了一些坑,主要就是对java代码执行循序,特别是在main方法之前的代码执行顺序了解不深入导致的,中间有多个继承关系也有点扰乱了思路。下面分享一下自己这个错误的复现步骤。...; } } 下面是执行结果: 我是Cbc构造方法! 我是Cbc静态代码块! 进入程序入口了! 这个就比较简单了,先执行静态变量赋值,然后执行静态代码块,然后再去执行main方法。...可以看出来,先执行Abc,再去执行Bbc,再去执行Cbc。...知道了这个逻辑,就可以做一些事情,比如Abc有一个int对象num的值是1,是公用默认的,但是我想在某一个特殊(Cbc)情况下使用num值是2,那么我可以Bbc里面对num重新赋值,使得我在使用Cbc这个情况下时候

1.2K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    mysql操作命令梳理(2)-alter(update、insert)

    在mysql运维操作中会经常使用到alter这个修改表的命令,alter tables允许修改一个现有表的结构,比如增加或删除列、创造或消去索引、改变现有列的类型、或重新命名列或表本身,也能改变表的注释和表的类型...下面就针对alter修改命令的使用做一梳理: 在mysql运维操作中会经常使用到alter这个修改表的命令,alter tables允许修改一个现有表的结构,比如增加或删除列、创造或消去索引、改变现有列的类型...DROP INDEX可以在ALTER TABLE内部作为一条语句处理 DROP index 索引名 ON 表名字 列名;       //删除普通索引 ALTER TABLE 表名 DROP INDEX...[LIMIT row_count]; insert into 表名 values(所有字段的插入值); insert into 表名(指定字段) values(指定字段); insert into 表名...即使在你将整个表中的所有数据delete清空后,之前的自增序列最大值还是会被重用。

    2.9K60

    VC 在调用main函数之前的操作

    ---- title: VC 在调用main函数之前的操作 tags: [VC++, 反汇编, C++实现原理] date: 2018-09-16 10:36:23 categories: VC+...它的代码比较长,刚开始也是进行函数的堆栈初始化操作,这个初始化主要是保存原始的ebp,保存重要寄存器的值,并且改变ESP的指针值初始化函数堆栈,这些就不详细说明了,感兴趣的可以去看看我之前写的关于函数反汇编分析的内容...到此,这篇博文简单的介绍了下在调用main函数之前执行的相关操作,这些汇编代码其实很容易理解,只是在注册异常的代码有点难懂。...最后总结一下在调用main函数之前的相关操作 注册异常处理函数 调用GetVersion 获取版本信息 调用函数 __heap_init初始化堆栈 调用 __ioinit函数初始化啊IO环境,这个函数主要在初始化控制台信息...,在未调用这个函数之前是不能进行printf的 调用 GetCommandLineA函数获取命令行参数 调用 GetEnvironmentStringsA 函数获取环境变量 调用main函数 ---

    4.1K20

    【漫画】finally到底是在return之前执行还是return之后执行?

    "); } } } 执行结果: 必需要执行的操作 比如说上面所示的代码,在try语句里面 i / 0 的话会抛出来异常,这样的话程序就在i / 0这里由于抛出了异常,所以程序不会继续往下去执行...比如我一些数据的关闭操作啦等,必须要执行的操作一定要放到finally语句,确保会执行。 在某些情况下,try语句压根就没有执行到,那么finally语句也一定就不会执行到了。...try finally-i:10 finally 20 在JVM虚拟机种,有虚拟机栈,上面的代码中每一个方法都对应了一个栈帧,方法的执行对应的栈帧入栈,方法的执行完毕对应着栈帧的出栈。...return返回后,就代表着方法执行结束,相应的该方法的栈帧就出栈了。而这个时候也就意味着,return返回是最后执行的,所以finally语句是在retrun返回之前执行的!...语句执行后,return返回之前执行的,也就是说finally必执行(当然是建立在try执行的基础上) finally中修改的基本类型没有return是不影响返回结果的,有了retrun才会影响 finally

    1.2K20

    Java finally 语句到底是在 return 之前还是之后执行?

    1 finally语句在return语句执行之后return返回之前执行的 2 finally块中的return语句会覆盖try块中的return返回 3 如果finally语句中没有return语句覆盖返回值...try中return的执行情况完全一样 6 最后总结 1 finally语句在return语句执行之后return返回之前执行的 public class FinallyTest1 { public...之前发生了除0异常,所以try中的return不会被执行到,而是接着执行捕获异常的catch 语句和最终的finally语句,此时两者对b的修改都影响了最终的返回值,这时return b;就起到作用了。...当然只有在异常的情况下才有可能会执行,那么是在finally之前就返回吗?看下面。...6 最后总结 finally块的语句在try或catch中的return语句执行之后返回之前执行且finally里的修改语句可能影响也可能不影响try或catch中 return已经确定的返回值,若finally

    1.9K10

    Java finally语句到底是在return之前还是之后执行?

    当然还有很多人探讨Finally语句的执行与return的关系,颇为让人迷惑,不知道finally语句是在try的return之前执行还是之后执行?我也是一头雾水,我觉得他们的说法都不正确。...我觉得应该是:finally语句是在try的return语句执行之后,return返回之前执行。...1. finally语句在return语句执行之后return返回之前执行的。...当然只有在异常的情况下才有可能会执行,那么是在finally之前就返回吗?看下面。 5. 当发生异常后,catch中的return执行情况与未发生异常时try中return的执行情况完全一样。...最后总结 finally块的语句在try或catch中的return语句执行之后返回之前执行且finally里的修改语句可能影响也可能不影响try或catch中 return已经确定的返回值,若finally

    1.3K20

    Java finally语句到底是在return之前还是之后执行?

    当然还有很多人探讨Finally语句的执行与return的关系,颇为让人迷惑,不知道finally语句是在try的return之前执行还是之后执行?...我也是一头雾水,我觉得他们的说法都不正确,我觉得应该是:finally语句是在try的return语句执行之后,return返回之前执行。...finally语句在return语句执行之后return返回之前执行的。...当然只有在异常的情况下才有可能会执行,那么是在finally之前就返回吗?看下面。 当发生异常后,catch中的return执行情况与未发生异常时try中return的执行情况完全一样。...最后总结: finally块的语句在try或catch中的return语句执行之后返回之前执行且finally里的修改语句可能影响也可能不影响try或catch中 return已经确定的返回值,若finally

    1.5K20

    大聪明教你学Java | 为什么不要在 foreach 里执行删除操作?

    前言今天在看阿里开发手册的时候发现里面提到了一个要求,强制要求开发人员不要在foreach循环里进行元素的remove/add操作。...看到这个要求的时候我突然想到之前使用foreach循环执行元素删除的时候会报错,不过一直没有研究过错误到底从何而来。...方法,然后ensureCapacityInternal方法又调用了ensureExplicitCapacity方法,在ensureExplicitCapacity方法中会执行modCount++的操作,...也就是说我们之前执行了3次add方法后,modCount的值就变成了3,所以执行newItr()的时候expectedModCount的值也就变成了3。...(内容来自百度百科)是不是又学习到了一个新知识,哈哈哈哈哈所以如果我们需要删除元素的时候一定不要用foreach循环哦,我们换成Iterator就可以完美的执行删除操作了。

    26610

    BackgroundWorker在单独的线程上执行操作

    如果在 Windows 窗体设计器中创建 BackgroundWorker,则它会出现在组件栏中,而且它的属性会显示在“属性”窗口中。 若要设置后台操作,请为 DoWork 事件添加一个事件处理程序。...若要在操作完成时收到通知,请对 RunWorkerCompleted 事件进行处理。 您必须非常小心,确保在 DoWork 事件处理程序中不操作任何用户界面对象。...请不要使用 BackgroundWorker 组件在多个 AppDomain 中执行多线程操作。...//在 DoWork 事件处理程序内部,可以从              //oWorkEventArgs.Argument 属性中提取该参数。             ...            bw.CancelAsync();         }  耗时的操作(如下载和数据库事务)在长时间运行时可能会导致用户界面 (UI) 似乎处于停止响应状态。

    2.8K10

    Sql语句在Mysql中的执行流程

    如果缓存 key 被命中,就会直接返回给客户端,如果没有命中,就会执行后续的操作,完成后也会把结果缓存起来,方便下一次调用。...当然在真正执行缓存查询的时候还是会校验用户的权限,是否有该表的查询条件。             ...MySQL 查询不建议使用缓存,因为查询缓存失效在实际业务场景中可能会非常频繁,假如你对一个表更新的话,这个表上的所有的查询缓存都会被清空。...所以,一般在大多数情况下我们都是不推荐去使用查询缓存的。             ...做完这些操作后,就会进入第二步。             第二步,语法分析,主要就是判断你输入的 sql 是否正确,是否符合 MySQL 的语法。

    7.8K10

    SQL语句在MySQL中是如何执行的

    建立连接的过程通常是比较复杂的,所以我建议你在使用中要尽量减少建立连接的动作,也就是尽量使用长连接。 查询缓存 连接建立好了以后,就可以执行 select 语句了,执行逻辑进入第二步:查询缓存。...如果缓存 key 被命中,就会直接返回给客户端,如果没有命中,就会执行后续的操作,完成后也会把结果缓存起来,方便下一次调用。当然在真正执行缓存查询的时候还是会校验用户的权限,是否有该表的查询条件。...做完这些操作后,就会进入第二步。 第二步:语法分析,主要就是判断你输入的 SQL 是否正确,是否符合 MySQL 的语法。,主要就是判断你输入的 SQL 是否正确,是否符合 MySQL 的语法。...优化器 经过了分析器分析,MySQL 知道你要干啥了,在开始执行之前,还要先经过优化器的处理。...InnoDB 引擎更新数据的操作其实还会涉及到两个日志模块的操作,以后会专门分析。主要就是 binlog 以及 redolog 的操作。

    7.1K20
    领券