备忘知识

1.minGW: 提供了简便的windows下的基于gcc程序开发环境。minGW收集了一系列免费的windows使用的头文件和库文件;同时整合了GNU的工具集,特别是GNU程序开发工具,如经典的gcc、g++、make等。minGW完全免费,在windows平台上模拟了linux下GCC开发环境,为C++的跨平台开发提供了良好的基础支持。

2. DJGPP:在WINDOWS平台下,我们一般用VC的编译器CL来编译我们的源程序,但在LINUX平台下,人们一般使用GCC(GNU Compiler Collection)。GCC也有在WINDOWS平台下的移植版本——DJGPP。有了DJGPP,我们就可以在WINDOWS平台下使用GCC了。
3.解决优先级反转的策略

优先级反转Priority Inversion,是指某同步资源被较低优先级的进程/线程所拥有,较高优先级的进程/线程竞争该同步资源未获得该资源,而使得较高优先级进程/线程反而推迟被调度执行的现象。

优先级天花板策略(Priority    ceilings): 优先级天花板是指将申请(占有)某资源的任务的优先级提升到可能访问该资源的所有任务中最高优先级任务的优先级.(这个优先级称为该资源的优先级天花板)   。在上述例子中体现为当低优先级任务申请占有某资源时就将这个低优先级任务的优先级升为能访问该资源的所有任务中最高优先级任务的优先级

优先级继承,高优先级进程TH在等待低优先级的线程TL继承占用的竞争资源时,为了使TH能够尽快获得调度运行,由操作系统把TL的优先级提高到TH的优先级,从而让TLTH的优先级参与调度,尽快让TL执行并释放调TH欲获得的竞争资源,然后TL的优先级调整到继承前的水平,此时TH可获得竞争资源而继续执行。 
优先级继承策略对任务执行流程的影响相对较小,因为只有当高优先级任务申请已被低优先级任务占有的临界资源这一事实发生时,才抬升低优先级任务的优先级。而天花板策略是谁占有就直接升到最高。
 
4.  在所有C程序中,嵌入式汇编的写法有asm{} asm(), __asm__ __volatile__ ("");其中asm 和 __asm 含义是一样的.
  而在ARM的C编译器中,主流是两大类,一类ARM公司出品的ARMCC,另一类用得更广的是gnu 的汇编,两者嵌入式汇编语法主和格式,有着很多细节微差别。
(1) ARM的嵌入式汇编:1)没有引号;2)用花括号包括进来;3)多行之间直接采用回车分隔;4)语法采用ARM汇编格式。格式如下:
     asm { 
        nop 
       mvn r0,#0
    }
 
 
(2) GNU 嵌入式汇编格式,用gcc编译的汇编必须满足如下格式

     1)一般以  __asm __volatile打头,用()包括起来;

     2)每句语句用""包括起来;  

     3)多语句之间用 \n或\nt分隔;

     4)专用寄存器用%%的打头表示;

  以下就是一个简单的嵌入式汇编格式:     

    __asm__ __volatile__ (

    "mov %0, #55\n"

    "mov %1, #66\n"

    "xor %%eax, %%eax\n"

    )

 

    asm(

    "mov r0, r0\n\t"

    "mov r0, r0\n\t"

    "mov r0, r0\n\t"

    "mov r0, r0"

    );

5. NULL与整数0不同。

空指针常量,An integer constant expression with the value 0, or such an expression cast to type void *, is called a null pointer constant

如0、0L、'\0'、3 - 3、0 * 17 或(void*)0都是空指针常量。

NULL是空指针常量。

当空指针常量表示指针时,就是空指针,也可以表示成NULL

空指针指向什么内存地址没有规定,系统一般实现是指向0地址。空指针的内部用全 0 来表示,称为零值空指针。有些系统实现空指针使用非零值空指针。

指针变量 p 是空指针的判断: if ( p == 0 ) if ( p == '\0' ) if ( p == 3 - 3 ) 
if ( p == NULL )  /* 使用 NULL 必须包含相应的标准库的头文件 */ if ( NULL == p ) if ( !p ) if ( p == q )

6.float数据类型精度为何是至少6位呢?

float浮点类型由IEEE754标准进行存储。1位符号位,8为指数位,23为尾数位(隐藏1位1),这样表示小数的最多可以用24位表示,这24二进制位,用八进制表示就是可以精确到8位,用十进制表示可以精确到至少6位。

7.volatile关键字

volatile修饰的变量表示编译器不要对其进行优化,该变量的值随时可能发生变化,需要每次从内存中读取。

使用场景:

(1) 并行设备的硬件寄存器

(2) 一个中断服务子程序中会访问到的非自动变量(全局变量

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

8.static关键字

在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。

     在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。

     在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。

     static全局变量与普通的全局变量有什么区别:static全局变量只初使化一次,防止在其他文件单元中被引用;

     static局部变量和普通局部变量有什么区别:static局部变量只被初始化一次,下一次依据上一次结果值;

     static函数与普通函数有什么区别:static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝

9.单工、半双工、全双工、同步、异步通信区别

单工:指仅能单方面传输。

双工:指两台数据设备之间,允许有双向的数据传输。

           半双工:允许设备之间的数据双向传输,但不能同时进行。好比作单轨的铁路或者对讲机。

            全双工:允许设备之间的数据双向传输,可以同时进行。好比作一个双向的车道或者手机。

同步传输模式:发送方和接收方的时钟是统一的,字符与字符间的传输是同步无间隔的。

异步传输模式:并不需要发送方和接收方的时钟完全一样,字符与字符间的传输是异步的。


10. find 搜索目录下的文件

      grep搜索文件中的字符串

find ./ -name "file.txt"    在当前目录及目录下搜索file.txt文件

grep -r "file" ./              在当前目录及子目录下的文件中搜索file字符串。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值