首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

将弱ISR处理程序从程序集覆盖到C++不会编译任何代码

弱ISR处理程序是指在嵌入式系统中用于处理中断请求的程序。将弱ISR处理程序从程序集覆盖到C++不会编译任何代码,意味着在将弱ISR处理程序从汇编语言(程序集)转换为C++语言时,并不会生成任何可执行的机器代码。

在嵌入式系统中,弱ISR处理程序通常是使用汇编语言编写的,因为汇编语言可以直接访问硬件寄存器和设备,提供了更高的灵活性和性能。然而,将弱ISR处理程序从汇编语言转换为C++语言可能有以下几个原因:

  1. 代码可读性和维护性:C++语言相对于汇编语言来说更容易理解和维护,具有更好的可读性和可维护性。使用C++语言编写弱ISR处理程序可以使代码更易于理解和修改。
  2. 跨平台支持:C++语言是一种跨平台的编程语言,可以在不同的嵌入式系统和硬件平台上进行移植。将弱ISR处理程序从汇编语言转换为C++语言可以增加代码的可移植性。
  3. 面向对象编程:C++语言支持面向对象编程,可以使用类和对象来组织和管理代码。将弱ISR处理程序从汇编语言转换为C++语言可以利用面向对象编程的优势,提高代码的可重用性和可扩展性。

尽管将弱ISR处理程序从汇编语言转换为C++语言可以带来一些好处,但也需要注意以下几点:

  1. 性能影响:C++语言相对于汇编语言来说具有更高的抽象层级,可能会导致一定的性能损失。在编写弱ISR处理程序时,需要注意代码的效率和性能,避免引入不必要的开销。
  2. 编译器支持:不同的编译器对于嵌入式系统的支持程度不同,可能存在一些限制和差异。在将弱ISR处理程序从汇编语言转换为C++语言时,需要确保所使用的编译器能够正确地编译和生成可执行的机器代码。

总结起来,将弱ISR处理程序从汇编语言覆盖到C++语言可以提高代码的可读性、可维护性和可移植性,但需要注意性能和编译器支持方面的问题。在实际应用中,可以根据具体的需求和系统要求来选择合适的编程语言和开发方式。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

FPGA 之 SOPC 系列(五)Nios II 软件使用与程序开发 I

二、编辑器和编译器 1、文本编辑器 成熟的全功能源文件编辑器,包括:语法高亮显示C/C++程序代码、全面的搜索工具、文件管理、在线帮助和教程、快速定位及自动纠错、内置调试等功能。...该调试器提供许多基本调试功能以及一些在低成本处理器开发套件中不会经常用到的高级调试功能。 基本调试功能包括:运行控制、调用堆栈查看、软件断点、反汇编代码查看、调试信息查看、指令仿真器。...NiosII的中断处理过程: 拷贝一份程序状态字ctl1; 清除全局中断允许位PIE,禁止中断; 下一条执行的指令的地址存入R29,以便中断返回之用; 跳转到中断入口地址,进入系统ISR;...系统ISR保护现场; 系统ISR检测ctl1的PIE位,如为0则进入软中断处理程序11继续,否则由7继续; 系统ISR检测Ctl4,如果有中断申请,则转到硬中断处理和序,否则进入软中断处理程序;...硬中断处理程序检测中断申请号,并检索中断向量表,跳转到用户中断处理程序; 用户中断处理程序做出具体的处理,最后返回系统ISR; 系统ISR恢复现场,并返回; 软中断处理程序进行陷井指令、模拟指令判断

94420

写中断程序要注意哪些方面?

如中断函数加using n修饰符,则在开始PSW入栈后还要修改PSW中的工作寄存器组选择位。 C51编译绝对地址8m 3处产生一个中断向量,其中m为中断号,也即interrupt后面的数字。...下面的代码就使用了__interrupt关键字去定义了一个中断服务子程序(ISR),请评论一下这段代码的。...如果你不懂这个,那么你不会被雇用的。 2) ISR 不能传递参数。如果你没有看到这一点,你被雇用的机会等同第一项。 3) 在许多的处理器/编译器中,浮点一般都是不可重入的。...有些处理器/编译器需要让额处的寄存器入栈,有些处理器/编译器就是不允许在ISR中做浮点运算。此外,ISR应该是短而有效率的,在ISR中做浮点运算是不明智的。...就是说,你可以在这个函数执行的任何时候中断他的运行,在OS的调度下去执行另外一段代码不会出现什么错误。

3.4K30
  • 【译】编程语言内存模型 Programming Language Memory Models

    使 done 原子化的最终结果就是程序按我们预期的样子执行:成功 x 的值线程 1 传递线程 2....在回答硬件的 Litmus 测试时,我们假设没有编译器对线程中的代码进行重排序:列表中的指令直接翻译成汇编指令在处理器上执行。...这意味着 r 可以观察在r之前发生的写入(但也不会在r之前被覆盖),并且它可以观察与r竞争的写入。...因为 x 和 y 0 开始,任何顺序一致的执行都不会执行写操作,所以这个程序没有写操作,也就没有竞争。...编译器可能不会将 i 的当前值放到函数堆栈上,而是在到达 switch语句时决定第二次全局 x 加载 i。结果是,在 if body 进行一半时,i < 2 可能不再为真。

    1.6K20

    谁告诉的你们Python是强类型语言!站出来,保证不打你!

    只是一个由编译器(解析器)内部处理的,一个是在外部由程序员编写代码处理的!而且就算Python不会支持内建类型的运算符重载,那么也有可能直接支持int + string的形式。...根据这个表可知,编程语言只是在遇到类型不合规的情况下处理的方式不同,这就是编译器(解析器)的业务逻辑了,这个业务逻辑随时可能变(通常不会影响程序的向下兼容),所以是不能用这一特性作为强弱语言标识的,否则强类型和类型语言就有可能会不断切换了...但也会有很多其他问题,如编译器(或运行时)的处理方式完全不同,我们知道,类型固化的程序要比类型不固化的程序运行效率高,因为类型不固化,需要不断去考虑类型转换的问题。...所以一旦编程语言类型固化变成类型不固化,尽管可以保证代码的兼容性,但编译器或运行时的内部实现机理完全改变,所以本质上说,也是另外一种编程语言了。就像人类的进化,尽管表面上符合人类的所有特征。...这些特性在静态语言(如Java、C++)中是无法做到的。在静态语言中,一个类一旦定义完,就不能再为类动态添加任何成员和移除任何成员,除非修改类的源代码

    1.1K50

    编程语言内存模型

    如果线程2在线程1执行之前done复制一个寄存器中,它可能会在整个循环中一直使用该寄存器,永远不会注意线程1后来修改了done。...编译后的代码必须做任何必要的事情来禁用可能会重新引入这些问题的硬件优化 使done原子化的最终结果是程序按照我们想要的方式运行,成功地x的值线程1传递线程2。...对r1的读取可以是读也可以是写:两者都发生在它之前,并且都不会完全覆盖另一个。通过相同的参数,读入r2可以读或写。...据称,C++编译器可能会将i保存在寄存器中,但如果标签foo处的代码很复杂,则需要重用这些寄存器。而不是转移i当前的值栈上, 编译器可能会决定在到达switch语句时,再次全局x加载i。...在提案的早期草稿中,列出的第一个原因是多线程C++代码编译成JavaScript。 当然,共享可写内存还需要定义同步的原子操作和内存模型。

    75930

    认识目标文件的符号

    编译器在 C++代码编译成目标文件时,会将函数和变量的名字进行修饰,形成函数签名。...编译器会将使用 extern “C” 修饰的代码当作C语言代码处理。...比如 C 语言库函数中的 string.h 中声明的 memset 函数,其原型如下: void* memset(void *, int, size_t); 如果不加任何处理,C 语言程序包含 string.h...上面这段代码中使用条件预处理指令的技巧几乎在所有的系统头文件里面都被用到。 4.符号与强符号 在编程中我们经常碰到一种编译错误叫符号重复定义。...链接器处理强引用和引用的过程几乎一样,只是对于未定义的引用,链接器不认为它是一个错误。一般对于未定义的引用,链接器默认其为0,或者是一个特殊的值,以便于程序代码能够识别。

    1.5K40

    ARM(十三).WatchDog1

    ) 选择H-JTAG ARM 模式 选择正确的模式 使用外部工具 代码示例 wtd.s 这是主汇编程序,定义了中断向量表,进行了各种初始化 GET s3c2410_SFR.s ;GET伪指令...可以被其它文件引用,[WEAK] 指定该选项后,如果symbol在所有的源程序中都没有被定义,编译器也不会产生任何错误信息,同时编译器也不会到当前没有被INCLUDE进来的库中去查找该标号 SUB..., {R0-R12,LR} ;保护现场,{R0-R12,LR}作压栈处理,顺序是寄存器小,SP!...,{R0-R12, PC}^ ;进行现场恢复,将之前压栈的环境变量堆栈中读出,覆盖当前的寄存器中,在LDM指令的寄存器列表中包含有PC时使用'^',那么除了正常的多寄存器传送外,SPSR拷贝CPSR...电位翻转 rWTCNT = 50625; //喂狗,如果不喂狗,超时就会复位 } } 编译执行 [Build]->[Debug]->[Run] 编译执行过程中没有报错,结果来看,符合预期

    78140

    ARM(十四).WatchDog with IRQ

    CODE32 ;CODE32伪指令指示汇编编译器后面的指令为32位的ARM指令 ENTRY ;ENTRY伪指令用于指定程序的入口点,一个程序(可以包含多个源文件)中至少要有一个ENTRY...[WEAK] ;EXPORT声明一个符号IRQ_Handler可以被其它文件引用,[WEAK] 指定该选项后,如果symbol在所有的源程序中都没有被定义,编译器也不会产生任何错误信息,同时编译器也不会到当前没有被..., {R0-R12,LR} ;保护现场,{R0-R12,LR}作压栈处理,顺序是寄存器小,SP!...,{R0-R12, PC}^ ;进行现场恢复,将之前压栈的环境变量堆栈中读出,覆盖当前的寄存器中,在LDM指令的寄存器列表中包含有PC时使用'^',那么除了正常的多寄存器传送外,SPSR拷贝CPSR...[Build]->[Debug]->[Run] 编译执行过程中没有报错,结果来看,符合预期 执行效果为,以1秒为间隔进行重复响断

    97840

    ARM(七).TIMER and PWM(1)

    CODE32 ;CODE32伪指令指示汇编编译器后面的指令为32位的ARM指令 ENTRY ;ENTRY伪指令用于指定程序的入口点,一个程序(可以包含多个源文件)中至少要有一个ENTRY...[WEAK] ;EXPORT声明一个符号IRQ_Handler可以被其它文件引用,[WEAK] 指定该选项后,如果symbol在所有的源程序中都没有被定义,编译器也不会产生任何错误信息...,同时编译器也不会到当前没有被INCLUDE进来的库中去查找该标号 SUB LR, LR, #4 ;LR连接寄存器(Link Register, LR),在ARM体系结构中LR的特殊用途有两种..., {R0-R12,LR} ;保护现场,{R0-R12,LR}作压栈处理,顺序是寄存器小,SP!...,{R0-R12, PC}^ ;进行现场恢复,将之前压栈的环境变量堆栈中读出,覆盖当前的寄存器中,在LDM指令的寄存器列表中包含有PC时使用'^',那么除了正常的多寄存器传送外,SPSR拷贝CPSR

    38830

    ARM(六).TIMER and IRQ(1)

    CODE32 ;CODE32伪指令指示汇编编译器后面的指令为32位的ARM指令 ENTRY ;ENTRY伪指令用于指定程序的入口点,一个程序(可以包含多个源文件)中至少要有一个ENTRY...[WEAK] ;EXPORT声明一个符号IRQ_Handler可以被其它文件引用,[WEAK] 指定该选项后,如果symbol在所有的源程序中都没有被定义,编译器也不会产生任何错误信息...,同时编译器也不会到当前没有被INCLUDE进来的库中去查找该标号 SUB LR, LR, #4 ;LR连接寄存器(Link Register, LR),在ARM体系结构中LR的特殊用途有两种..., {R0-R12,LR} ;保护现场,{R0-R12,LR}作压栈处理,顺序是寄存器小,SP!...,{R0-R12, PC}^ ;进行现场恢复,将之前压栈的环境变量堆栈中读出,覆盖当前的寄存器中,在LDM指令的寄存器列表中包含有PC时使用'^',那么除了正常的多寄存器传送外,SPSR拷贝CPSR

    64430

    ARM(五).EINT and IRQ(1)

    CODE32 ;CODE32伪指令指示汇编编译器后面的指令为32位的ARM指令 ENTRY ;ENTRY伪指令用于指定程序的入口点,一个程序(可以包含多个源文件)中至少要有一个ENTRY...[WEAK] ;EXPORT声明一个符号IRQ_Handler可以被其它文件引用,[WEAK] 指定该选项后,如果symbol在所有的源程序中都没有被定义,编译器也不会产生任何错误信息...,同时编译器也不会到当前没有被INCLUDE进来的库中去查找该标号 SUB LR, LR, #4 ;LR连接寄存器(Link Register, LR),在ARM体系结构中LR的特殊用途有两种..., {R0-R12,LR} ;保护现场,{R0-R12,LR}作压栈处理,顺序是寄存器小,SP!...,{R0-R12, PC}^ ;进行现场恢复,将之前压栈的环境变量堆栈中读出,覆盖当前的寄存器中,在LDM指令的寄存器列表中包含有PC时使用'^',那么除了正常的多寄存器传送外,SPSR拷贝

    57830

    ARM(十二).ADC with IRQ1

    CODE32 ;CODE32伪指令指示汇编编译器后面的指令为32位的ARM指令 ENTRY ;ENTRY伪指令用于指定程序的入口点,一个程序(可以包含多个源文件)中至少要有一个ENTRY...LDR PC, (Vect_Table + 32) ;这里进行跳转,相当于 goto main(由此可知c语言中的main函数之所以叫main,也是类似这样的地方定义的,如果取别的名字比如xxx,那C的代码就都会...[WEAK] ;EXPORT声明一个符号IRQ_Handler可以被其它文件引用,[WEAK] 指定该选项后,如果symbol在所有的源程序中都没有被定义,编译器也不会产生任何错误信息,同时编译器也不会到当前没有被..., {R0-R12,LR} ;保护现场,{R0-R12,LR}作压栈处理,顺序是寄存器小,SP!...,{R0-R12, PC}^ ;进行现场恢复,将之前压栈的环境变量堆栈中读出,覆盖当前的寄存器中,在LDM指令的寄存器列表中包含有PC时使用'^',那么除了正常的多寄存器传送外,SPSR拷贝CPSR

    74920

    ARM(九).RTC and ALARM(1)

    ) 选择H-JTAG ARM 模式 选择正确的模式 使用外部工具 代码示例 alarm.s 这是主汇编程序,定义了中断向量表,进行了各种初始化 GET s3c2410_SFR.s ;GET伪指令...;CODE32伪指令指示汇编编译器后面的指令为32位的ARM指令 ENTRY ;ENTRY伪指令用于指定程序的入口点,一个程序(可以包含多个源文件)中至少要有一个ENTRY,可以有多个...[WEAK] ;EXPORT声明一个符号IRQ_Handler可以被其它文件引用,[WEAK] 指定该选项后,如果symbol在所有的源程序中都没有被定义,编译器也不会产生任何错误信息,同时编译器也不会到当前没有被..., {R0-R12,LR} ;保护现场,{R0-R12,LR}作压栈处理,顺序是寄存器小,SP!...,{R0-R12, PC}^ ;进行现场恢复,将之前压栈的环境变量堆栈中读出,覆盖当前的寄存器中,在LDM指令的寄存器列表中包含有PC时使用'^',那么除了正常的多寄存器传送外,SPSR拷贝CPSR

    82510

    ARM(十).RTC and TICK(1)

    CODE32 ;CODE32伪指令指示汇编编译器后面的指令为32位的ARM指令 ENTRY ;ENTRY伪指令用于指定程序的入口点,一个程序(可以包含多个源文件)中至少要有一个ENTRY...LDR PC, (Vect_Table + 32) ;这里进行跳转,相当于 goto main(由此可知c语言中的main函数之所以叫main,也是类似这样的地方定义的,如果取别的名字比如xxx,那C的代码就都会...[WEAK] ;EXPORT声明一个符号IRQ_Handler可以被其它文件引用,[WEAK] 指定该选项后,如果symbol在所有的源程序中都没有被定义,编译器也不会产生任何错误信息,同时编译器也不会到当前没有被..., {R0-R12,LR} ;保护现场,{R0-R12,LR}作压栈处理,顺序是寄存器小,SP!...,{R0-R12, PC}^ ;进行现场恢复,将之前压栈的环境变量堆栈中读出,覆盖当前的寄存器中,在LDM指令的寄存器列表中包含有PC时使用'^',那么除了正常的多寄存器传送外,SPSR拷贝CPSR

    86430

    ​面试常问的16个C语言问题,你能答上来几个?

    (2)静态数据成员是在程序开始运行时被分配空间,程序结束之后才释放,只要类中指定了静态数据成员,即使不定义对象,也会为静态数据成员分配空间。...优点: 1:编译器可以对const进行类型安全检查(所谓的类型安全检查,能将程序间彼此隔离开来,这种隔离能确保程序彼此间不会产生负面影响,提高程序的可读性); 2:有些集成化的调试工具可以对const...下面的代码就使用了__interrupt关键字去定义了一个中断服务子程序(ISR),请评论一下这段代码的。...如果你不懂这个,那么你不会被雇用的。 2:ISR 不能传递参数。如果你没有看到这一点,你被雇用的机会等同第一项。 3:在许多的处理器/编译器中,浮点一般都是不可重入的。...有些处理器/编译器需要让额处的寄存器入栈,有些处理器/编译器就是不允许在ISR中做浮点运算。此外,ISR应该是短而有效率的,在ISR中做浮点运算是不明智的。

    1.1K20

    ARM(三).UART with FIFO(2)

    CODE32 ;CODE32伪指令指示汇编编译器后面的指令为32位的ARM指令 ENTRY ;ENTRY伪指令用于指定程序的入口点,一个程序(可以包含多个源文件)中至少要有一个ENTRY...[WEAK] ;EXPORT声明一个符号IRQ_Handler可以被其它文件引用,[WEAK] 指定该选项后,如果symbol在所有的源程序中都没有被定义,编译器也不会产生任何错误信息...,同时编译器也不会到当前没有被INCLUDE进来的库中去查找该标号 SUB LR, LR, #4 ;LR连接寄存器(Link Register, LR),在ARM体系结构中LR的特殊用途有两种..., {R0-R12,LR} ;保护现场,{R0-R12,LR}作压栈处理,顺序是寄存器小,SP!...,{R0-R12, PC}^ ;进行现场恢复,将之前压栈的环境变量堆栈中读出,覆盖当前的寄存器中,在LDM指令的寄存器列表中包含有PC时使用'^',那么除了正常的多寄存器传送外,SPSR拷贝

    29810

    深入理解JVM虚拟机5:虚拟机字节码执行引擎

    每一个方法调用开始至执行完成的过程,都对应着一个栈帧在虚拟机栈里面入栈出栈的过程。 栈帧概念结构如下图所示: ?...注意:这种退出方式不会给上层调用者产生任何返回值。...举个例子:如果你定义了一个整型变量a,那么程序根本不可能将a当作字符串类型处理。强类型定义语言是类型安全的语言。 类型定义语言 :数据类型可以被忽略的语言。...Java语言中,javac编译器完成了程序代码经过词法分析、语法分析抽象语法树,再遍历语法树生成线性的字节码指令流的过程,因为这一部分动作是在Java虚拟机之外进行的,而解释器在虚拟机内部,所以Java...基于栈的指令主要的优点就是可移植,寄存器是由硬件直接提供,程序直接依赖这些硬件寄存器则不可避免地要受到硬件的约束。 栈架构的指令还有一些其他的优点,如代码相对更加紧凑,编译器实现更加简单等。

    56110

    C语言可重入函数和不可重入函数

    因为别的代码很可能覆盖这些变量值。 第二,在和硬件发生交互的时候,切记执行类似disinterrupt()之类的操作,就是关闭硬件中断。...下 面的代码就使用了__interrupt关键字去定义了一个中断服务子程序(ISR),请评论一下这段代码的。...如果你不懂这个,那么你不会被雇用的。 2) ISR 不能传递参数。如果你没有看到这一点,你被雇用的机会等同第一项。 3) 在许多的处理器/编译器中,浮点一般都是不可重入的。...有些处理器/编译器需要让额处的寄存器入栈,有些处理器/编译器就是不允许在ISR中做浮点运 算。此外,ISR应该是短而有效率的,在ISR中做浮点运算是不明智的。...就是说,你可以在这个函数执行的任何时候中断他的运行,在OS的 调度下去执行另外一段代码不会出现什么错误。

    3.5K30

    C#简单的面试题目(三)

    const关键字用来声明编译时常量,readonly用来声明运行时常量。 33. 用sealed修饰的类有什么特点 sealed 修饰符用于防止所修饰的类派生出其它类。...具体来说,由于密封类用于不会任何派生类,所以对密封类的实例的虚拟函数成员的调用可以转换为非虚拟调用来处理。...泛型,通过参数化类型来实现在同一份代码上操作多种数据类型。利用参数化类型类型抽象化,从而实现灵活的复用。   好处是——类型安全,减少装箱和拆箱,提高性能,减少重复性的编程任务。...在应用程序中通过指定端口和地址建立监听 远程设备发出连接请求 应用程序接受连接产生通信scoket 应用程序和远程设备开始通讯(在通讯中应用程序挂起直到通讯结束) 通讯结束,关闭应用程序和远程设备的...一般用于编译型编程语 言,如c++,java,c#,pascal等,类型相比而言不安全,在运行的时候容易出现错误,但它灵活,多用于解释型编 程语言,如javascript,vb等

    96210

    ARM(十一).ADC(1)

    ) 选择H-JTAG ARM 模式 选择正确的模式 使用外部工具 代码示例 adc.s 这是主汇编程序,定义了中断向量表,进行了各种初始化 GET s3c2410_SFR.s ;GET伪指令...,[WEAK] 指定该选项后,如果symbol在所有的源程序中都没有被定义,编译器也不会产生任何错误信息,同时编译器也不会到当前没有被INCLUDE进来的库中去查找该标号 SUB LR, LR, #4..., {R0-R12,LR} ;保护现场,{R0-R12,LR}作压栈处理,顺序是寄存器小,SP!...,{R0-R12, PC}^ ;进行现场恢复,将之前压栈的环境变量堆栈中读出,覆盖当前的寄存器中,在LDM指令的寄存器列表中包含有PC时使用'^',那么除了正常的多寄存器传送外,SPSR拷贝CPSR...中,这可用于异常处理返回,使用'^'后缀进行数据传送且寄存器列表不包含PC时,加载/存储的是用户模式的寄存器,而不是当前模式的寄存器 ENDP END main.c 主 c 程序中定义了中断处理程序

    54340
    领券