㈠ 嵌入式中BSP的概念是什么,比如在linux中,请通俗的讲一下,谢谢了!
BSP(Board Support Package),板级支持包,也称为硬件抽象层HAL或者中间层。
它将系统上层软件和底层硬件分离开来,使系统上层软件开发人员无需关系底层硬件的具体情况,根据BSP层提供的接口开发即可。
BSP是相对于操作系统而言的,不同的操作系统有不同定义形式的BSP,要求BSP所实现的功能也有所不同。
在嵌入式Linux系统中,主要是初始化底层硬件并引导操作系统;同时,BSP又是和硬件相关的,还要考虑对硬件的初始化操作。这些初始化操作主要是对CPU、内存、中断等相关的寄存器及协处理器进行正确的配置。
在不同的开发阶段,因为核心和文件系统所处的位置不同,BSP所要完成的工 作也有所不同;在开发调试阶段,BSP要能够与主机通信并从主机下载核心;在目标产品中,BSP要能够从非易失存储设备中加载核心。
(1)c语言中bsp什么意思扩展阅读
BSP有两个特点:硬件相关性和操作系统相关性。
设计一个完整的BSP需要完成两部分工作:
A、 嵌入式系统的硬件初始化和BSP功能。
片级初始化:纯硬件的初始化过程,把嵌入式微处理器从上电的默认状态逐步设置成系统所要求的工作状态。
板级初始化:包含软硬件两部分在内的初始化过程,为随后的系统初始化和应用程序建立硬件和软件的运行环境。
系统级初始化:以软件为主的初始化过程,进行操作系统的初始化。
B、 设计硬件相关的设备驱动。
㈡ STM32文件命名为bsp_led,其中的bsp代表什么意思
在STM32用到了5个串口,2个SPI,1个I2C,32个INPUT,40个OUPUT。
BSP是不是就是把这些管脚设置初始化,然后APP用到某个管脚输出时,在APP.C里就调用BSP.C里编写的管脚操作函数,不需要具体直接参与操作硬件。这样子就把硬件操作封装起来,这样子把上位机软件操作与硬件相关的隔离开。
我现在写了BSP_iNIT()把管脚初始化到自已要用的状态。是不是再写一些直接操作管脚的函数,比如BSP_led_on什么的,这样子APP里要点灯,直接调用这个函数就行。
㈢ C语言中%p%m什么意思
%p意思就是以16进制的格式输出,一般为了输出地址了。
%m输出错误的,errno(一个全局的变量)里面的错误码以字符串的形式输出,这个用得不多
㈣ C语言中#include "./key/bsp_key.h" ./key/是什么意思
./key/表示当前目录的key子目录。
㈤ 在c语言中 **表示什么意思。
*表示指针,**表示指针的指针。
例如:int *a;这个语句声明了一个变量a,a的数据类型是int *,也就是整型变量的指针类型(如果不懂什么是指针,那这个问题就没有意义了)。也就是说 a的值是一个内存地址,在这个地址所在的内存空间中存放的是一个整型变量。再看:int **b;这个语句也声明了一个变量b,b的数据类型是int **,也就是整型变量的指针的指针类型(二级指针)。也就是说 b的值是一个内存地址,该地址所在的内存空间中存放的是一个整型变量的指针(一级指针,或许就是上面那个a的值)。
㈥ C语言%p的含义
格式控制符“%p”中的p是pointer(指针)的缩写。指针的值是语言实现(编译程序)相关的,但几乎所有实现中,指针的值都是一个表示地址空间中某个存储器单元的整数。printf函数族中对于%p一般以十六进制整数方式输出指针的值,附加前缀0x。
%p是打印地址的, %x是以十六进制形式打印,完全不同!另外在64位下结果会不一样,所以打印指针老老实实用%p .
拓展资料
C是一种通用的编程语言,广泛用于系统软件与应用软件的开发。于1969年至1973年间,为了移植与开发UNIX操作系统,由丹尼斯·里奇与肯·汤普逊,以B语言为基础,在贝尔实验室设计、开发出来。
C语言具有高效、灵活、功能丰富、表达力强和较高的可移植性等特点,在程序设计中备受青睐,成为最近25年使用最为广泛的编程语言[2]。目前,C语言编译器普遍存在于各种不同的操作系统中,例如Microsoft Windows、macOS、Linux、Unix等。C语言的设计影响了众多后来的编程语言,例如C++、Objective-C、Java、C#等。
二十世纪八十年代,为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局为C语言订定了一套完整的国际标准语法,称为ANSI C,作为C语言的标准。二十世纪八十年代至今的有关程序开发工具,一般都支持匹配ANSI C的语法。
㈦ BSP是什么
我还以为有人再问ASP的新动向BSP呢(B-Business),原来仍然是讨论图形技术的程序员。
BSP是一种数据结构,用于基于空间划分的索引方式,一般三维图形应用利用它进行空间遮挡关系计算的加速,而二维图形应用则利用它进行空间查询。它的基本思路就是对空间进行逐级划分形成二分树状结构。具体内容可以参考CloudWu的一篇简介性文章,我把它贴出来。
- 信区: Programe .Bull编程讨论(黄石)-------------------------------------
信件: 37 Sent Local 日期: 27 Nov 97 07:13:45
来自: Cloud Wu 已读: 是 已回信 : 否
给: All 标记:
主题: BSP树--制作3D Engine
------------------------------------------------------------------------------
... 这是一篇介绍BSP树的文章,原文在我U/L的 UGRPG.ZIP 中,因为我的
... E文实在不怎么样,所以在只能在看过原文后,根据自己的理解写一篇
... C文的(不是翻译),如果有什么BUG,请各位大虾多多Debug. :)
BSP 树
------
解释BSP树的运用,最好是从一个例子开始.设想一个很简单的DOOM关卡的例子.
A---------------------------------a----------------------------------B
| | | |
| | y | |
d1 | | b1
| | f' | |
| | | |
| C--------------------f-----------------------D |
| | | | | |
| | | f" | | |
| d | | b |
| | | | | |
| | e" e e' g' g g" | |
d2 | | | | b2
| | | | | |
| | | | | |
| | E F | |
| | x | |
| | | |
G---------------------------------c----------------------------------H
----c1---- ----------------------c2-------------------- -----c3-----
这个关卡由一个屋子套在另一个屋子里构成.玩家被封闭在矩形ABHG中.
先给出几个定义.(如图)
我们用矢量定义直线,所以
a = (A,B) e = (E,C) f = (C,D) g = (F,D)
当一个点在直线矢量方向的左边时,我们称点在直线的左边.
因此,在这个例子里,a的左边什么也没有;所有的东东都在它的右边.注意这些
依赖与我们对a的定义,如果我们定义 a = (B,A) 则所有的东东都在a的左边.
面是玩家看到的直线的一边.例如墙e,就有两个面(e'和e").不是所有的墙都有
两个面 -- 如果玩家只能看见墙的一面,那么这堵墙就只有一个面.
面是由矢量方向定义的,直线的两个面分别被称作左表面和右表面.
这个例子中的BSP树是这样的:
f
/ / \
/ a,d1,b1 e
/ / / d2,c1 g
/ / / c2 c3,b2
每个节点都是一条直线.所有在直线左边的东东都在它的左子树上,所有在它
右边的东东都在它的右子树上.
注意 d 面不是完全在 f 面的右边或左边.为了描述这种情况,我们把它分为
了两个部分,一个部分放在左子树,一部分放在右子树.因而,我们必须产生新
的面来构造BSP树.
我将在后面解释BSP数是怎样创建的.首先,我将给出使用BSP树来产生一幅画的方法.
假设玩家站在点'x',看着北方.
我们从树的顶端直线 f 开始.我们站在直线 f 的右边,所以我们向树的左子
树进行下去.这是因为我们想最先画最远的多边形.
我们来到了最左的节点.请在笔记本上记下节点上的东东--"a,d1,b1".
当我们不能再往下时,回到父节点.现在回到了根节点,我们还不能马上去右子树.
首先,我们看见了 f 面--写在这个节点上的.我们已经在我们列出的表上得到了
处在它后面的所有东东,我们还将看见它前面的东东,但是我们必须先把它记入我
们的表中.注意,f 面有两个表面--f' 和 f".既然我们已经知道我们处在直线 f
的右边,当然就只能看到它的右表面--所以我们在笔记本上记下 f".现在本子上
写着 a,d1,b1,f".
注意,如果我们是看着南方(视线远离 f 面),看不到 f 的任何一个面和 f 的那
一面后的所有东东.在这种情况下,我们就不必做前面这些.
现在我们向下到节点 e.我们在 e 的右边,所以要往左子树去,这样便得到了一个
叶节点.现在把 d2,c1 记下来.
再回来,看看该记下 e 的哪一面.应该是 e'.现在笔记本上写着
a,d1,b1,f",d2,c1,e'.
向右子树,来到 g 节点.我们在左边,所以向右得到 c3,b2,再回来,检查 g (我
们在左边,应为g'),去最后一个节点得到 c2,回溯,回溯,回溯,回到根节点,遍历
完成.
最后笔记本上写着:
a d1 b1 f" d2 c1 e' c3 b2 g' c2
如果我们以这个次序来画这些墙,将得到正确的图象.建议你使用3D-buffer而
不要用画家算法,这样速度要快的多.
创建 BSP 树
-----------
BSP树完全是递归创建的.唯一的困难是知道何时该停止递归.应该注意到叶节
点将被整个放入表中--因此将一组平面放在一个叶节点上的充分条件是它们能
够以任何次序画出来而不致有错.也就是说,无论玩家站在哪儿,这一组墙之间
都不会被别的挡住.
好吧,让我们开始:选择一个面 f (这个选择相当随便--最好是选一个面,它能
最少的分割其它面.当然,分割是不可避免的).分割 d 面和 b 面,因为它们被
直线 f 分开了.(用DOOM中的说法,去分割区域的线被称为节点线 _nodeline_ )
然后把 f 左边的东东放在左子树,右边也如此:
f
/ / / a,d1,b1 b2,c,d2,e,g
我们可以不再处理左子树--因为墙 a,d1,b1 构成一个凸多边形,从任意角度
看它们都互不重叠.然而在另一边,平面 e 却使得从特定点去观察平面 d2 会
被其挡住,所以我们从 e 处分开,这就造成了平面 c 的分割,但是同样被分割
的平面 a 却不用被分割,这是因为 a 不在现在分析的平面中.
第二级 BSP 树为:
f
/ / / a,d1,b1 e
/ / \
/ d2,c1 b2,c2,g
现在,c1 和 d2 从不重叠,顾而我们将它们作为另一个叶节点.下一步我们
从 g 处分开,将 c2 分成 c2 和 c3,剩下的节点都是叶节点.
下面这棵 BSP 树的最简单运用--再给一个例子来加深印象.考虑一下站在
y 点向北看的情况.因为看不到 f 面,你只用搜索左子树.这样马上就得到
了需要的循序: a,d1,b1.
精华
----
如果我们在每个节点上为每个子树定义一个特定空间,记录子树中的信息,
这样我们就能以锥形视野比较这些信息将一些不可见的多边形截掉(屏幕
左边和右边的东东)--如果它们不相交,这样你就不必搜索整个子树.DOOM
就是这样做的,在一个巨大的 BSP 树中用特定空间储存了每一级的完整
(*entire*)信息.
下面是搜索 BSP 树的伪代码.函数 left() 当第二个输入矢量在第一个输
入矢量的左边时返回 TRUE.这就是两个矢量的点积,...
... Sorry,小D这一句不太明白
>This is a simple dot proct, and by pre-calculating the slope of the
>nodeline can be done with one multiply and one subtract.
vector player ; player's map position
; 玩家在地图上的位置矢量
vector left_sightline ; vector representing a ray cast through
; the left-most pixel of the screen
; 描述发射到屏幕最左边的光线的矢量
vector right_sightline ; the right-most pixel of the screen
; 描述发射到屏幕最右边的光线的矢量
structure node
{
vector vertex1
vector vertex2
node left_subtree
node right_subtree
face left_face
face right_face
box bounding_box
bool terminal_node
face terminal_node_faces[lots]
}
recurse(node input)
if (cone defined by left and right sightlines does not intersect the node's
bounding box)
return
fi
if node.terminal_node
; terminal node - add faces to list
; 叶节点--将平面填入表中
add(node.terminal_node_faces)
return
fi
if left(vertex2-vertex1,player-vertex1)
; player is to the left of the nodeline
; 玩家在节点线的左边
if not left(vertex2-vertex1,right_sightline)
; sight points right - we are looking at the face
; 视线指向右边--我们正看着这个面
recurse(node.right_subtree)
add(node.left_face)
fi
; now go down the left subtree
; 现在向左子树搜索
recurse(node.left_subtree)
else
; player is to the right of the nodeline
; 玩家在节点线的右边
if left(vertex2-vertex1,left_sightline)
; sight points left - we are looking at the face
; 视线指向左边--我们正看着这个面
recurse(node.left_subtree)
add(node.right_face)
fi
; now go down the right subtree
; 现在向右子树搜索
recurse(node.right_subtree)
fi
return
end recurse
这不是正规的代码--象数据结构之类的很多东东都没写. :)㈧ keil工程文件中stm32下面bsp.c文件是做什么的作用呢跪求解释,一定采纳
你玩的是UCOS吧,这个文件是STM32硬件驱动相关的文件,一般是放程序启动相关,时钟的设置之类的,这个文件里还可以放其他的驱动文件,如你自己写的很多函数的初始化函数,或者其他函数,不过建议你如果是自己写的其他驱动函数的话还是建立一个自己的文件来存放,这样用起来也方便些,bsp.c这个文件你可以去看看里面具体包含了什么,如果是你移植过来的,那你就去看看哪些是你不需要的,那样就可以去除掉,可以省一些空间的
㈨ c语言中bc什么意思
ORACLE试图将其转换成多个表的连接,如果转换不成功则先执行IN里面的子查询,再查询外层的表记录,如果转换成功则直接采用多个表的连接方式查询。由此可见用IN的SQL至少多了一个转换的过程。一般的SQL都可以转换成功,但对于含有分组统计等方面的SQL就不能转换了。
㈩ n&bsp是什么意思
C语言 n;;=1 中的;;=意思是先将变量n的各个二进制位顺序右移1位,最高位补二进制0,然后将这个结果再复制给n。