嵌入式开发完整体系课程(含项目) 扫二维码继续学习 二维码时效为半小时

(170评价)
价格: 598.00元
  1. 特殊关键字

const   定义只读变量(指针)

volatile  易变,防止优化

restrict  促使优化,只能修饰指针,只有一种途径进行访问(指向堆内存)

likely     不倾向于

unlikely  判断条件成立的可能性,以此决定程序是否跳转还是直接执行

    2.attribute机制

 

[展开全文]

编写软件:

1.vi编辑器

 2.secureCRT / minicom:串口软件,与开发板进行连接

3.通过网络服务NFS与开发板传输文件///无法网络连接时用串口传输

4.软件source insight,查看编辑大型工程文件

5.裸机编程软件:keil

[展开全文]

插件:动态加载链接库,

静态库:ar rcs lib×××.a *.o将所有的.o生成×××的静态库

--------------------------------------------------------------------------

动态库:gcc -shared -fPIC -o libyyy.so *.o

先用gcc life.c -o life.o -c -I  ../includ/

生成life.O,再用ar rcs liblife.a  *.O生成liblife.a的静态库

或者用gcc -shared -fPIC -o libyyy.so *.o生成动态库libyyy.so,最好复制到lib目录里

那么总工程分为src  lib  include三个文件夹,

其中include里放head.h lib里放liblife.a和libyyy.so

src里放life.C,life.O 和main.c

-------------------------------------------------------------------

理解静态库和动态库的区别?

静态库是将代码复制到工程里,但缺点是浪费了存储空间,(书店买书的过程)

动态库:(图书馆借书的原理)优点是节省大量空间,应用的静态库要多。

动态库连接还分为两种方式:静态链接和动态链接,静态链接里的库函数在库里的地址是固定的。

动态链接:子函数名字一样,但参数不同,也就是定好多个接口,主程序通过传递参数不同,调用不同的接口即可实现动态连接调用

gcc编译完通过,

export LD_LIBRARY_PATH=lib指定库位置,然后就可以运行./main

或者执行gcc src/main.c -o main -I include/ -L lib/-lyyy -wl, rpath=./lib 编译通过,然后运行./main成功运行。

-----------------------------------------------

 

 

 

 

 

 

[展开全文]
617076572 · 2018-03-13 · 0

特殊关键字:CV限定词

1.const(一般用于定义指针,只用于只读型变量申明)

只能在定义的时候,给予赋值,比如

const int b=100;

不可以通过*p的方式来修改变量的值。

命令窗口中输入strncy,按下shift+k进入strcpy帮助文档,

 volatile 使用(易变的,防止优化)与volatile完全相反。

*(volatile unsigned long *)0x40010c00)=100;

当软件程序修改或硬件发生变化时,都可以使得这块内存发生变化,特别是与硬件有关的内存控制器

务必让那个CPU每次都要读取内存中信息,防止缓存优化。

resrtict(促进优化)只能用来说明指针

示例:restrict int *m=malloc(100)m指向堆内存,而且是唯一的

likely和like指出现在内核中GNU扩展的语法

为提高执行工作效率才设计的

attribute机制:假设做好了a.c里有个main函数,输入命令readelf -S a,看到默认main函数放在.init段里面,初始化代码放这里只会被执行一次,若想放在别的段里,可以通过attribute来指定。

 

 

 

 

 

[展开全文]
617076572 · 2018-03-13 · 0

如何用secure-crt工具远程访问linux系统?

在ubantu里下载安装ssh服务:

sudo apt-get ssj

sudo apt-get install ssh

在secure-crt选中ssh2协议,然后在secure-crt的主机名填写远程linux系统的iP地址,用户名填写远程linux系统的用户名geconline,点连接,保存密码,即可远程登陆远程linux系统。

source insight很重要的软件编辑和查看工具。

可以按下ctrl,再点击代码处,即可快速实现跳转到代码里。再按alt+,即可回来,再按alt+。就又回去了,若项目太大,无法立刻跳转到,则需要

projcet---synchronize files--force all files to be  repared 即可完成所有文件同步,

查找文件的功能:要记得勾选project wide选项,不然只能查找本文件内容。

keil软件应用开发STM32

 

[展开全文]
617076572 · 2018-03-13 · 0

可移植性数据类型思考对嵌入式系统开发影响,考虑到数据类型的统一性,采用宏定义,头文件包在usr/include里有很多宏定义,

linux系统是32位,每次存取32位数据进行处理,即每次内存以4字节为单位进行处理

m值其实是定每个变量的相对位置,代表是对应的倍数,代表起始地址的要求,m对结构体也有要求必须是

struct node

{ char a;1byte,m=1

 short c;  2byte ,m=2

int b _attribute_((aligned(64)));4byte,m=4

double d; 8bytes,m=4

};// m=64

int b _attribute_((aligned(64)))指定结构体中的首变量a和本变量b以64的整数倍开始而已,然后以四个单元作为填充,不够的补零即可。而且要求整个结构体占用内存64个单元的整数倍为止。

结构体中的位置地址对齐: 默认要求首变量的起始地址是64的整数倍,char型占一个字节  int占4个字节  short占2个字节,double占8个字节,结构体的大小是按照成员中的最大的变量所占的大小来分配内存,

 


[展开全文]
617076572 · 2018-03-13 · 0

test -e file && test -r file 而是file是否存在和是否可读,如果是,就显示出file里的内容

if [ -e file] && [ -r file]

then

cat file

 

shell也可以支持函数编写,

[展开全文]
617076572 · 2018-03-09 · 0

典型系统启动脚本:vi /etc/init.d/rc

以“!/bin/sh”shell软件解释命令

在shell中,自定义变量,Myanme=“Michael”

注意赋值号两边没有空格,且变量名只能包含字母和数字,且只能英文开头。

变量的引用举例:echo $Michael

用$表示对变量的引用

举例:./example.sh abcd 1234

$#代表命令行参数个数2

 $*代表所有的参数,即abcd 1234

$@同上

$n第n个参数,

$$代表当前shell的进程号PID

$?代表最后一个命令执行后的返回值

---------------------------------------------------------

$var="apple"

echo "{#var}" 计算一个字符串的字符个数

echo $a=echo $(a)

 

[展开全文]
617076572 · 2018-03-09 · 0

ctrl+alt+t打开一个终端

权限举例:-rw-r--r-- 

 drwxrwxrwx d表示目录,-表示文件,r读w写x执行

修改权限:sudo chmod u-w,g-r,o+x wrap.c

alias c='clear' 给命令取别名

[展开全文]
617076572 · 2018-03-09 · 0

下载并安装帮助文档:

sudo apt-get install manpages

sudo apt-get install manpages-dev

sudo apt-get install manpages-posix

sudo apt-get install manpages-posix-dev

使用:man -f read 列出所有的read帮助文档

用posix指出用哪条,1posix提供shell命令帮助信息,2posix提供系统调用,3posix提供库函数,假如需要库函数read的帮助信息,用以下命令即可:

man 3posix read

---------------------------------------------

掌握用ftp实现文件下载:

在ubantu中安装FTP服务端命令:

sudo apt-get install vsftpd ,安装后,对配置文件/etc/vsftpd.conf进行修改,修改如下

将#local_enalbe=YES,#write_enalbe=YES前的#去掉,并重启FTP服务

sudo service vsftpd restart 然后用xp系统下的一款ftp软件来连接到ubantu下,并将xp系统下的文件传到ubantu里的share里

 

 

[展开全文]
617076572 · 2018-03-09 · 0

vm和vi的区别?是升级版

[展开全文]
617076572 · 2018-03-09 · 0

当ubantu安装后默认主帐户可以有超级权限,如果让其他用户也有临时取得sudo的权限?

按照文档通过配置/etc/sudoers来实现并保存退出

ctr+O代表保存写入,ctr+X代表退出

zhangsan ALL=(ALL:ALL) ALL

提示:/etc/sudoers.tmp,删除tmp,再回车,按Y确实进行覆盖。这样是实现增加了zhagnsan这个超级用户权限。

如何让ubantu联网?

1.先保证xp能上网,然后在设置ubantu

2.网络连接设置

若是自己的电脑连了路由器,则选桥接模式,

若没有,选NAT模式(用于共享主机的IP地址)

3.用PING 测试网络是否通,不通则ifconfig查看IP设对没,若不对,

则sudo vi /etc/network/interfaces 进入后修改IP可以在原有的静态IP上修改,也可以直接改为动态IP获取,保存退出,然后通过以下命令重启网络:sudo /etc/init.d/networking restart

再次ping百度网站,如果还不行,则怀疑DNS不行,就修改DNS服务器设置

sudo vi  /etc/resolvconf/resolv.conf.d/base

进入后,增加dns服务器地址(1,2个)

nameserver 202.96.134.133 (这里地址是百度搜到的最近的DNS地址)然后重启DNS服务

sudo /etc/init.d/resolvconf restart

如果以上操作还不行,则可以再加一默认网关

sudo route add default gw 192.168.1.1然后再ping百度即可连上网络

---------------------------------------------------------

APT软件管理器:APT将各个版本的Ubuntu用到的软件,分在各地服务器中,只需要联网指定一个服务器就行,步骤如下:

下载更新软件列表清单到本地:

sudo apt-get updata

安装和卸载***软件的命令:

sudo apt-get install ***

sudo apt-get remove ***

 

 

 

 

 

 

[展开全文]
617076572 · 2018-03-09 · 0

数据的重定义

数据在内存的对齐(值得设定)

[展开全文]
罗金辉 · 2018-01-10 · 0

脚本编程语法格式

[展开全文]
jh1992 · 2017-06-29 · 0

正则表达式

常用命令

[展开全文]
jh1992 · 2017-06-29 · 0

关于编译器VI的一些操作

[展开全文]
jh1992 · 2017-06-29 · 0

linux支持静态库和动态库

静态库:ar rcs libxxx.a *.o将所有的的点o文件生成libxxx.a库 

gcc -shared -fPIC-olibyyy.so *.o

gcc life.c -o life.o-c加上-c便可以生成重定向文件

gcc life.c -o life.o-c -I .. /incude/

表示重定向.c文件成为.o文件同时包含上一级目录的include文件库文件不能包含main.c

动态库连接方式:1.静态连接

函数在动态库里面相当于函数调用流程 ,地址固定代码固定

2.动态链接:不是固定地址,动态库可以有很多个

可以根据不同的参数加在不同的功能!

运行一个动态库 例如:gcc src/main.c -o main -I include/ -L lib /  -yyy -wl, -rpath

中l指的是link

-rpath= ./lib表示链接一个动态库

或者export LD_LIBRARY_PATH=lib(设置环境变量)

 

 

[展开全文]
frankliu · 2017-03-27 · 0

1.const 不能定义常量,定义可读变量一般用来定义指针;

2.int x=100;

const int *p=&x;

int const *P=&x

x=200可以修改;

*P=200是不合法的是为了使用更安全

上面是第一类;

第二类:

int  y=100

int *const k=&y;

此时k不能指向别的变量

如果 y=200合法

*k=200也是合法的但是

k=&a是不合法的 

volatile  例如;*( volatile unsigned long*) 0x400010c00=100;

volatile(易变的)(防止优化 )跟硬件有关的寄存器内存一定要防止优化

 

 

restrict(促进优化)

可以高效使用缓存一般使用指针:restrict int*m=malloc(100)

表示m是唯一访问方式

likely和unlikely用于内核中代码优化使用更高效率的代码(!!x)将x转化为去布尔类型

attribute GNU扩展语法

 

 

[展开全文]
frankliu · 2017-03-27 · 0

vi编辑器:使用串口连接

协议:serial

端口:根据设备管理器

波特率:115200

然后启动开发板

 

[展开全文]
frankliu · 2017-03-25 · 0

头文件包里面

typedef 语句放入其中

如usr/include

对于跨平台开发能够提高移植性;

除了大小固定还有对其位置进行固定;

比如结构体,如struct node 

{

  char a;

int b;

short c;

double d;

}m值为4大小为20=4+4+4+8=20

m值 起始位置必须是m的整数倍;结束也必须是m的整数倍如果不是必须补0,如果将c和b换一下位置则大小为16

struct node 

{

  char a;

short c;

int b _atrribute_((aligned(64)));

double d;

}

大小为128

注意b的起始地址必须是64的整数倍

[展开全文]
frankliu · 2017-03-25 · 0