C/C++软件工程师就业求职手册学习笔记---第七章

本文探讨了位运算在嵌入式编程中的应用,包括移位操作、置位、清零等基本概念,并提供了访问特定内存位置的具体实例。同时介绍了C++中四种类型转换运算符的特点与使用场景,以及在嵌入式系统中断处理中避免使用浮点运算的原因。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第七章 位运算与嵌入式编程

移位操作,置位,清零操作等

统计1出现的次数,可参照下面文章。

http://blog.youkuaiyun.com/fengzhizizhizizhizi/article/details/21404383

例子1:

列举并解释C++中四种运算符转化,说明他们的不同点

1、const_cast 操作符:即可以在特殊情况下,解除const成员函数的限制。

2、dynamic_cast操作符:用于判断运行时所指向对象的确切类型,可以将一个姐累的指针指向不同的子类(派生类),然后将被转型作为基础类的对象还原成原来的类,不过仅限于对象指针的类型转换。

3、reinterpret_cast操作符:将一个指针转换成其他类型的指针,可以是毫不相干,void* 到char *,int* 到float *。

4、static_cast操作符:在相关的对象和指针类型之间转换。有关类必须是通过继承构造函数或者是转换函数联系的,他能将数域较大的类型转换为较小类型。

/****************************理解不深,后面补上******************************/

例子2:如何访问特定位置内存。

int*ptr;
ptr=(int*)0x6719;
*ptr=0xaa55;

也可以:

*(int*)0x6719=0xaa55;

例子3:

__interruptdouble compute_area(double radius)
{
         double area=PI*radius*radius;
         printf("area =%f",area);
         return area;
}

第一,不能有返回值;

第二,不能传递参数;

第三,很多编译器或处理器,浮点数是不可重入的,有些处理器或编译器需要使用额外的存储器入栈,有些编译器或处理器不允许在ISR中做浮点运算。此外,ISR应该是短而且有效率的,在ISR中做浮点数不好。

第四,printf()经常出现重复和性能上的问题。

 

volatile型变量,用时会重新读取该变量,而不是保存在寄存器中的备份。使用场景:

1、并行设备的硬件寄存器(如状态寄存器);

2、一个中断子程序中会访问到的非自动变量;

3、多线程应用中被几个任务共享的变量。

判断big endian littleendian

int checkCPU()
{
         union w
         {
                  int a;
                  char b;
         }c;
         c.a=1;
         return(c.b==1);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值