嵌入式学习笔记

来源:互联网 发布:c语言运算符号有哪些 编辑:程序博客网 时间:2024/06/06 13:56

嵌入式系统定义 技术角度以应用为中心,以计算机技术为基础,软硬件可裁剪,应用系统对功能,可靠性,成本,体积,功耗,和应用环境有特殊要求的专用计算机系统系统角度 设计完成复杂功能的硬件和软件并使其紧密契合在一起的计算机系统


实时在规定的时间内,完成规定的动作
红帽linux 基本命令
ls 查看当前目录的内容


clear 清屏


mkdir XX 建立某个目录


CD 进入某个目录


CD ..返回上层


CD ../..返回根目录


rmdir XX 删除目录(目录为空的情况下)

rm -rf XX 强制删除目录


rm -f XX.X 文件删除


ifconfig 显示本机网卡信息


ifconfig XX(网卡名) XX.XX.XX.XX 修改IP地址


cp XX.X /XX 拷贝当前目录下某个文件到指定目录下

cp -r XX /XX 拷贝目录到某个目录下


mv XX CC 重命名


mv XX /home/ 把XX移到某个目录下(剪切)


tar -xvzf XX -C /.../..../或.(.到当前目录)

x 解压缩
v 显示文件名
z 使用 gzip 压缩解压缩
f 基于文件

r4 可读 w2 写 x1 执行

s或S(SUID,Set UID):可执行的文件搭配这个权限,便能得到特权,任意存取该文件的所有者能使用的全部系统资源。请注意具备SUID权限的文件,黑客经常利用这种权限,以SUID配上root帐号拥有者,无声无息地在系统中开扇后门,供日后进出使用。

T或T(Sticky):/tmp和 /var/tmp目录供所有用户暂时存取文件,亦即每位用户皆拥有完整的权限进入该目录,去浏览、删除和移动文件。

chmod XX 744

vim a.c b.c c.c 同时打开多个文件


i插入模式 ESC退出 Shift+:进入命令模式 在命令模式下,n上一个文件,N下一个文件,rew从第一个开始 wq保存并退出
yy 复制 p黏贴 dd删除 u撤销
gedit XX.c gcc XX.c ./a.out 执行
vim 跳到指定行 命令模式下 :15 (就到15行)

 

 

linux下程序在连接过程中做了什么

http://wenku.baidu.com/view/97393050ad02de80d4d84071.html符号解析和重定位

C语言中什么是段错误,用gdb怎么调试

http://wenku.baidu.com/view/08beca82d4d8d15abe234ebb.html内存越界直接运行错误后给出错误的行数

如何自动生成Makefile文件

http://blog.csdn.net/xiewenbin1987/article/details/6823476

静态库和动态库

接静态库其实从某种意义上来说只不过它操作的对象是目标代码而不是源码而已。因为静态库被链接后库就直接嵌入可执行文件中了,这样就带来了两个问题。

(1)首先就是系统空间被浪费了。这是显而易见的,想象一下,如果多个程序链接了同一个库,则每一个生成的可执行文件就都会有一个库的副本,必然会浪费系统空间。

(2)再者,一旦发现了库中有bug,挽救起来就比较麻烦了。必须一一把链接该库的程序找出来,然后重新编译。

而动态库的出现正弥补了静态库的以上弊端。因为动态库是在程序运行时被链接的,所以磁盘上只须保留一份副本,因此节约了磁盘空间。如果发现了bug或要升级也很简单,只要用新的库把原来的替换掉就行了。

但是静态库也有自己的优点:

编译后的执行程序不需要外部的函数库支持,因为所有使用的函数都已经被编译进去了。

静态库的名字一般是libxxx.a(Linux)

动态库的名字一般是libxxx.so (Linux),有时候也是 libxxx.so.major.minor,xxxx是该lib的名称,major是主版本号, minor是副版本号

linux系统有几个重要的目录存放相应的函数库,如/lib /usr/lib

当天笔记

源程序->预处理(头文件加载宏替换)->{编译->汇编}->链接->可执行
gcc -o 生成的可执行文件名 XX.c/ XX.c -o生成的可执行文件名
gcc -E XX.c > XX.i 只进行预处理 检查宏是否正常替换
gcc -c hello.c 编译生成.o文件
-S 汇编 -s小写的话生成可执行a.out不生成.s文件
-O(大写) -> time -O/O2 ./执行文件 优化执行时间 测试
gcc -wall *.c -o main 提示警告信息
-w 关闭警告
-O2
gcc -c *.c 通配符 编译当前目录下所有的.c文件

gdb 功能 1启动被调试程序 2.断点调试 3查看停止时的程序状态、变量值
gcc -g(使用时必须加g)XX.c -o CC
gdb CC
(gdb) run
(gdb) break 15 执行到代码的15行之后进行调试
list 查看程序
next 单步执行 step 单步但进入子程序
Print 变量名
continue 结束调试运行完程序
q 结束退出

加载头文件用 "" <>的 区别前者先在当前目录找,找不到到指定目录找 后者只在指定目录找
现有main函数调用了add函数 add.h在当前目录或其他目录


gcc main.c add.c -I ../其他目录
系统的库文件位置 cd/usr/include/ 下 如果在main函数中调用sin函数用到了math.h
gcc main.c -lm 这里的m为 libm.so 是系统的动态库文件
动态库 执行时才链接 静态库 执行前加入,如果库文件改变功能,程序执行结果却不变,难以升级
静态库创建
ar rcs 库名 xx cc vv
rc 静态库不存在就创建 s 更新库文件
gcc main.c -l库文件名 -L. 当前目录 -L../ 上层
动态库的创建
gcc -shared -fPIC -o 库名.so cc zz dd
gcc main.c ./libxx.so -o 可执行文件名
宏定义DEBUG在程序调试中的初级用法
1 #define __DEBUG__
2 #ifndef __DEBUG__
3 #define debug_msg(fmt, args...)
4 #else
5 #define debug_msg(fmt, args...) printf(fmt, ##args)
6 #endif

1 #include<stdio.h>
2 #include"debug.h"
3 int main()
4 {
5 printf("hello!");
6 debug_msg("OK!");
7 return 0;
8 }
程序管理器 Makefile
vim Makefile或makefile 或其他名称
make -f XX/XX clean

1 obj=add.o main.o sub.o div.o mul.o
2 main:$(obj)
3 gcc -o main $(obj)
4 $(obj):add.c sub.c main.c div.c mul.c
5 gcc -c *.c
6 .PHONE:clean
7 clean:
8 rm -f main.o add.o sub.o div.o mul.o main
 

 

什么是系统缺省的shell

缺省的shell就是默认的shell,你创建一个账户是系统默认会给你分配一个shell,linux下是bash,bsd下是csh,这个就是缺省的shell,当然你可以自己修改;
查看你的系统安装的shell
$ls -l /bin/*sh
修改shell:
$chsh shell
或者修改/etc/passwd 的最后一项

AIX 下是Korn Shell.
  Solaris缺省的是Bourne shell.
  FreeBSD缺省的是C shell
  HP-UX缺省的是POSIX shell.
  Linux是Bourne Again shell.

Linux中的shell有多种类型,其中最常用的几种是Bourne shell(sh)、C shell(csh)和Korn shell(ksh)。三种shell各有优缺点。

Bourne shell是UNIX最初使用的shell,并且在每种UNIX上都可以使用。Bourne shell在shell编程方面相当优秀,但在处理与用户的交互方面做得不如其他几种shell。

Bourne Again shell,它是Bourne shell的扩展,简称Bash,与Bourne shell完全向后兼容,并且在Bourne shell的基础上增加、增强了很多特性。Bash放在/bin/bash中,它有许多特色,可以提供如命令补全、命令编辑和命令历史表等功能,它还包含了很多C shell和Korn shell中的优点,有灵活和强大的编程接口,同时又有很友好的用户界面。

  C shell是一种比Bourne shell更适于编程的shell,它的语法与C语言很相似。 Linux为喜欢使用C shell的人提供了Tcsh。Tcsh是C shell的一个扩展版本。Tcsh包括命令行编辑、可编程单词补全、拼写校正、历史命令替换、作业控制和类似C语言的语法,它不仅和Bash shell是提示符兼容,而且还提供比Bash shell更多的提示符参数。
  Korn shell集合了C shell和Bourne shell的优点并且和Bourne shell完全兼容。Linux系统提供了pdksh(ksh的扩展),它支持任务控制,可以在命令行上挂起、后台执行、唤醒或终止程序。

POSIX Shell
   POSIX shell 是Korn shell的一个变种. 当前提供POSIX shell的最大卖主是Hewlett-Packard。在HP-UX 11.0 , POSIX shell 就是/bin/sh,而bsh是/usr/old/bin/sh.

TCSH shell不同于其他的shell,因为控制结构更符合程序设计语言的格式。例如TCSH 的test条件的控制结构是表达式,而不是linux命令,得到的值是逻辑值true或false,TCSH的表达式与C语言中的表达式基本相同。

 

 

原创粉丝点击