C编程这个elsesql if else用法有误吗?

新手园地& & & 硬件问题Linux系统管理Linux网络问题Linux环境编程Linux桌面系统国产LinuxBSD& & & BSD文档中心AIX& & & 新手入门& & & AIX文档中心& & & 资源下载& & & Power高级应用& & & IBM存储AS400Solaris& & & Solaris文档中心HP-UX& & & HP文档中心SCO UNIX& & & SCO文档中心互操作专区IRIXTru64 UNIXMac OS X门户网站运维集群和高可用服务器应用监控和防护虚拟化技术架构设计行业应用和管理服务器及硬件技术& & & 服务器资源下载云计算& & & 云计算文档中心& & & 云计算业界& & & 云计算资源下载存储备份& & & 存储文档中心& & & 存储业界& & & 存储资源下载& & & Symantec技术交流区安全技术网络技术& & & 网络技术文档中心C/C++& & & GUI编程& & & Functional编程内核源码& & & 内核问题移动开发& & & 移动开发技术资料ShellPerlJava& & & Java文档中心PHP& & & php文档中心Python& & & Python文档中心RubyCPU与编译器嵌入式开发驱动开发Web开发VoIP开发技术MySQL& & & MySQL文档中心SybaseOraclePostgreSQLDB2Informix数据仓库与数据挖掘NoSQL技术IT业界新闻与评论IT职业生涯& & & 猎头招聘IT图书与评论& & & CU技术图书大系& & & Linux书友会二手交易下载共享Linux文档专区IT培训与认证& & & 培训交流& & & 认证培训清茶斋投资理财运动地带快乐数码摄影& & & 摄影器材& & & 摄影比赛专区IT爱车族旅游天下站务交流版主会议室博客SNS站务交流区CU活动专区& & & Power活动专区& & & 拍卖交流区频道交流区
空间积分0 信誉积分128 UID7372124阅读权限10积分12帖子精华可用积分14 专家积分0 在线时间12 小时注册时间最后登录
白手起家, 积分 12, 距离下一级还需 188 积分
帖子主题精华可用积分14 专家积分0 在线时间12 小时注册时间最后登录
论坛徽章:0
如何解决如下问题?谢谢。
(1).errors when make
$ make target=ARM | tee build.txt
TARGET: ARM
CRASH: 7.0.7
& &GDB: 7.6
checking build system type... x86_64-unknown-linux-gnu
checking host system type... x86_64-unknown-linux-gnu
checking target system type... arm-elf-linux-gnu
checking for a BSD-compatible install... /usr/bin/install -c
checking whether ln works... yes
checking whether ln -s works... yes
checking for a sed that does not truncate output... /bin/sed
checking for gawk... gawk
checking for gcc... gcc
checking for C compiler default output file name...
configure: error: in `/disk_ext/projects/tools/crash/gdb-7.6':
configure: error: C compiler cannot create executables
See `config.log' for more details.
make[2]: *** No targets specified and no makefile found.&&Stop.
crash build failed
make[1]: *** [gdb_merge] Error 1
make: *** [all] Error 2
(2). errors in config.log
81 gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5)
82 configure:4212: $? = 0
83 configure:4201: gcc -V &&5
84 gcc: error: unrecognized option '-V'
85 gcc: fatal error: no input files
86 compilation terminated.
87 configure:4212: $? = 4
88 configure:4201: gcc -qversion &&5
89 gcc: error: unrecognized option '-qversion'
90 gcc: fatal error: no input files
91 compilation terminated.
92 configure:4212: $? = 4
93 configure:4232: checking for C compiler default output file name
94 configure:4254: gcc -m32& &conftest.c&&&&5
95 /usr/bin/ld: cannot find crt1.o: No such file or directory
96 /usr/bin/ld: cannot find crti.o: No such file or directory
97 /usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.6/libgcc.a when searching for -lgcc
98 /usr/bin/ld: cannot find -lgcc
99 /usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.6/libgcc_s.so when searching for -lgcc_s
100 /usr/bin/ld: cannot find -lgcc_s
101 /usr/bin/ld: cannot find -lc
102 /usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.6/libgcc.a when searching for -lgcc
103 /usr/bin/ld: cannot find -lgcc
104 /usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.6/libgcc_s.so when searching for -lgcc_s
105 /usr/bin/ld: cannot find -lgcc_s
106 /usr/bin/ld: cannot find crtn.o: No such file or directory
107 collect2: ld returned 1 exit status
108 configure:4258: $? = 1
(3).更多的config.log内容
1 This file contains any messages produced by compilers while
&&2 running configure, to aid debugging if configure makes a mistake.
&&4 It was created by configure, which was
&&5 generated by GNU Autoconf 2.64.&&Invocation command line was
&&7& &$ ./configure --target=arm-elf-linux CFLAGS=-m32 --with-separate-debug-dir=/usr/lib/debug --with-bugurl= --with-expat=no --with-python=no
&&9 ## --------- ##
10 ## Platform. ##
11 ## --------- ##
13 hostname = wangxd530u64
14 uname -m = x86_64
15 uname -r = 3.5.0-52-generic
16 uname -s = Linux
17 uname -v = #78~precise1-Ubuntu SMP Wed Jun 11 17:14:53 UTC 2014
19 /usr/bin/uname -p = unknown
20 /bin/uname -X& &&&= unknown
22 /bin/arch& && && && &&&= unknown
23 /usr/bin/arch -k& && & = unknown
24 /usr/convex/getsysinfo = unknown
25 /usr/bin/hostinfo& && &= unknown
26 /bin/machine& && && &&&= unknown
27 /usr/bin/oslevel& && & = unknown
28 /bin/universe& && && & = unknown
30 PATH: /home/wangxd/bin
31 PATH: /home/wangxd/bin
32 PATH: /usr/lib/lightdm/lightdm
33 PATH: /usr/local/sbin
34 PATH: /usr/local/bin
35 PATH: /usr/sbin
36 PATH: /usr/bin
37 PATH: /sbin
38 PATH: /bin
39 PATH: /usr/games
42 ## ----------- ##
43 ## Core tests. ##
44 ## ----------- ##
46 configure:2317: checking build system type
47 configure:2331: result: x86_64-unknown-linux-gnu
48 configure:2378: checking host system type
49 configure:2391: result: x86_64-unknown-linux-gnu
50 configure:2411: checking target system type
51 configure:2424: result: arm-elf-linux-gnu
52 configure:2478: checking for a BSD-compatible install
53 configure:2546: result: /usr/bin/install -c
54 configure:2557: checking whether ln works
55 configure:2579: result: yes
56 configure:2583: checking whether ln -s works
57 configure:2587: result: yes
58 configure:2594: checking for a sed that does not truncate output
59 configure:2658: result: /bin/sed
60 configure:2667: checking for gawk
61 configure:2683: found /usr/bin/gawk
62 configure:2694: result: gawk
63 configure:3936: checking for gcc
64 configure:3952: found /usr/bin/gcc
65 configure:3963: result: gcc
66 configure:4192: checking for C compiler version
67 configure:4201: gcc --version &&5
68 gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
69 Copyright (C) 2011 Free Software Foundation, Inc.
70 T see the source for copying conditions.&&There is NO
71 not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
73 configure:4212: $? = 0
74 configure:4201: gcc -v &&5
75 Using built-in specs.
76 COLLECT_GCC=gcc
77 COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.6/lto-wrapper
78 Target: x86_64-linux-gnu
79 Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.6.3-1ubuntu5' --with-bugurl=file:///usr/share/doc/gcc-4.6/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr& &&&--program-suffix=-4.6 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.6 --& & libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --enable-plugin --enable-objc-gc --disable-werror --wi& & th-arch-32=i686 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
80 Thread model: posix
81 gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5)
82 configure:4212: $? = 0
83 configure:4201: gcc -V &&5
84 gcc: error: unrecognized option '-V'
85 gcc: fatal error: no input files
86 compilation terminated.
87 configure:4212: $? = 4
88 configure:4201: gcc -qversion &&5
89 gcc: error: unrecognized option '-qversion'
90 gcc: fatal error: no input files
91 compilation terminated.
92 configure:4212: $? = 4
93 configure:4232: checking for C compiler default output file name
94 configure:4254: gcc -m32& &conftest.c&&&&5
95 /usr/bin/ld: cannot find crt1.o: No such file or directory
96 /usr/bin/ld: cannot find crti.o: No such file or directory
97 /usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.6/libgcc.a when searching for -lgcc
98 /usr/bin/ld: cannot find -lgcc
99 /usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.6/libgcc_s.so when searching for -lgcc_s
100 /usr/bin/ld: cannot find -lgcc_s
101 /usr/bin/ld: cannot find -lc
102 /usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.6/libgcc.a when searching for -lgcc
103 /usr/bin/ld: cannot find -lgcc
104 /usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.6/libgcc_s.so when searching for -lgcc_s
105 /usr/bin/ld: cannot find -lgcc_s
106 /usr/bin/ld: cannot find crtn.o: No such file or directory
107 collect2: ld returned 1 exit status
108 configure:4258: $? = 1
109 configure:4295: result:
110 configure: failed program was:
111 | /* confdefs.h */
112 | #define PACKAGE_NAME &&
113 | #define PACKAGE_TARNAME &&
114 | #define PACKAGE_VERSION &&
115 | #define PACKAGE_STRING &&
116 | #define PACKAGE_BUGREPORT &&
117 | #define PACKAGE_URL &&
118 | /* end confdefs.h.&&*/
121 | main ()
125 |& &return 0;
127 configure:4301: error: in `/disk_ext/projects/tools/crash/gdb-7.6':
128 configure:4305: error: C compiler cannot create executables
129 See `config.log' for more details.
131 ## ---------------- ##
132 ## Cache variables. ##
133 ## ---------------- ##
135 ac_cv_build=x86_64-unknown-linux-gnu
136 ac_cv_env_AR_FOR_TARGET_set=
137 ac_cv_env_AR_FOR_TARGET_value=
138 ac_cv_env_AR_set=
139 ac_cv_env_AR_value=
140 ac_cv_env_AS_FOR_TARGET_set=
141 ac_cv_env_AS_FOR_TARGET_value=
142 ac_cv_env_AS_set=
143 ac_cv_env_AS_value=
144 ac_cv_env_CCC_set=
145 ac_cv_env_CCC_value=
146 ac_cv_env_CC_FOR_TARGET_set=
147 ac_cv_env_CC_FOR_TARGET_value=
148 ac_cv_env_CC_set=
149 ac_cv_env_CC_value=
150 ac_cv_env_CFLAGS_set=set
151 ac_cv_env_CFLAGS_value=-m32
152 ac_cv_env_CPPFLAGS_set=
153 ac_cv_env_CPPFLAGS_value=
154 ac_cv_env_CXXFLAGS_set=
155 ac_cv_env_CXXFLAGS_value=
156 ac_cv_env_CXX_FOR_TARGET_set=
157 ac_cv_env_CXX_FOR_TARGET_value=
158 ac_cv_env_CXX_set=
159 ac_cv_env_CXX_value=
160 ac_cv_env_DLLTOOL_FOR_TARGET_set=
161 ac_cv_env_DLLTOOL_FOR_TARGET_value=
162 ac_cv_env_DLLTOOL_set=
163 ac_cv_env_DLLTOOL_value=
164 ac_cv_env_GCC_FOR_TARGET_set=
165 ac_cv_env_GCC_FOR_TARGET_value=
166 ac_cv_env_GCJ_FOR_TARGET_set=
167 ac_cv_env_GCJ_FOR_TARGET_value=
168 ac_cv_env_GFORTRAN_FOR_TARGET_set=
169 ac_cv_env_GFORTRAN_FOR_TARGET_value=
170 ac_cv_env_GOC_FOR_TARGET_set=
171 ac_cv_env_GOC_FOR_TARGET_value=
172 ac_cv_env_LDFLAGS_set=
173 ac_cv_env_LDFLAGS_value=
174 ac_cv_env_LD_FOR_TARGET_set=
175 ac_cv_env_LD_FOR_TARGET_value=
176 ac_cv_env_LD_set=
177 ac_cv_env_LD_value=
178 ac_cv_env_LIBS_set=
179 ac_cv_env_LIBS_value=
180 ac_cv_env_LIPO_FOR_TARGET_set=
181 ac_cv_env_LIPO_FOR_TARGET_value=
182 ac_cv_env_LIPO_set=
183 ac_cv_env_LIPO_value=
184 ac_cv_env_NM_FOR_TARGET_set=
185 ac_cv_env_NM_FOR_TARGET_value=
186 ac_cv_env_NM_set=
187 ac_cv_env_NM_value=
188 ac_cv_env_OBJCOPY_set=
189 ac_cv_env_OBJCOPY_value=
190 ac_cv_env_OBJDUMP_FOR_TARGET_set=
191 ac_cv_env_OBJDUMP_FOR_TARGET_value=
192 ac_cv_env_OBJDUMP_set=
193 ac_cv_env_OBJDUMP_value=
194 ac_cv_env_RANLIB_FOR_TARGET_set=
195 ac_cv_env_RANLIB_FOR_TARGET_value=
196 ac_cv_env_RANLIB_set=
197 ac_cv_env_RANLIB_value=
198 ac_cv_env_READELF_FOR_TARGET_set=
199 ac_cv_env_READELF_FOR_TARGET_value=
200 ac_cv_env_READELF_set=
201 ac_cv_env_READELF_value=
&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp
空间积分0 信誉积分128 UID7372124阅读权限10积分12帖子精华可用积分14 专家积分0 在线时间12 小时注册时间最后登录
白手起家, 积分 12, 距离下一级还需 188 积分
帖子主题精华可用积分14 专家积分0 在线时间12 小时注册时间最后登录
论坛徽章:0
更新了gcc编译器,仍不能解决该问题。
空间积分0 信誉积分2195 UID阅读权限100积分136756帖子精华可用积分136836 专家积分55 在线时间4489 小时注册时间最后登录
帖子主题精华可用积分136836 专家积分55 在线时间4489 小时注册时间最后登录
论坛徽章:7
& & 你是想在 x86 平台上编译 ARM 的代码,那么你得有对应得交叉编译工具链,而且得让配置脚本找到它们。
I can explain it for you, but I can’t understand it for you.
空间积分0 信誉积分128 UID7372124阅读权限10积分12帖子精华可用积分14 专家积分0 在线时间12 小时注册时间最后登录
白手起家, 积分 12, 距离下一级还需 188 积分
帖子主题精华可用积分14 专家积分0 在线时间12 小时注册时间最后登录
论坛徽章:0
我编译的是x86的应用程序,具体的应用程序是crash,运行在x86平台上,用于分析arm linux下的内核panic问题,所以没有交叉编译的问题。
空间积分0 信誉积分128 UID7372124阅读权限10积分12帖子精华可用积分14 专家积分0 在线时间12 小时注册时间最后登录
白手起家, 积分 12, 距离下一级还需 188 积分
帖子主题精华可用积分14 专家积分0 在线时间12 小时注册时间最后登录
论坛徽章:0
target=ARM,意为crash目录是的arm.c将会被编译,并不是要用arm-gcc来参与。
空间积分0 信誉积分2195 UID阅读权限100积分136756帖子精华可用积分136836 专家积分55 在线时间4489 小时注册时间最后登录
帖子主题精华可用积分136836 专家积分55 在线时间4489 小时注册时间最后登录
论坛徽章:7
本帖最后由 MMMIX 于
23:36 编辑
& & 这样啊。仔细看了下你贴的 config.log,你的工具链有问题:
94 configure:4254: gcc -m32& &conftest.c&&&&5
95 /usr/bin/ld: cannot find crt1.o: No such file or directory
96 /usr/bin/ld: cannot find crti.o: No such file or directory
97 /usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.6/libgcc.a when searching for -lgcc
98 /usr/bin/ld: cannot find -lgcc
99 /usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.6/libgcc_s.so when searching for -lgcc_s
100 /usr/bin/ld: cannot find -lgcc_s
101 /usr/bin/ld: cannot find -lc
102 /usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.6/libgcc.a when searching for -lgcc
103 /usr/bin/ld: cannot find -lgcc
104 /usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.6/libgcc_s.so when searching for -lgcc_s
105 /usr/bin/ld: cannot find -lgcc_s
106 /usr/bin/ld: cannot find crtn.o: No such file or directory
107 collect2: ld returned 1 exit status
看起来你是要在 x86_64 环境下编译个 x86 的程序,可是又没有把对应的依赖文件装全(例如说 32位的C库,gcc 依赖库,等)。你这里的 -m32 哪来的?crash 的编译程序自己添加的还是你在配置过程中设置的?
I can explain it for you, but I can’t understand it for you.
空间积分0 信誉积分128 UID7372124阅读权限10积分12帖子精华可用积分14 专家积分0 在线时间12 小时注册时间最后登录
白手起家, 积分 12, 距离下一级还需 188 积分
帖子主题精华可用积分14 专家积分0 在线时间12 小时注册时间最后登录
论坛徽章:0
分析的有道理。但本人仍没有找到解决方法。
-m32是crash源代码编译时自己添加的,不是我手动添加的。
请再帮忙解决一下。谢谢。
空间积分0 信誉积分2195 UID阅读权限100积分136756帖子精华可用积分136836 专家积分55 在线时间4489 小时注册时间最后登录
帖子主题精华可用积分136836 专家积分55 在线时间4489 小时注册时间最后登录
论坛徽章:7
& & 你要么把缺的包装上,要么把那个 -m32 给去掉。
I can explain it for you, but I can’t understand it for you.
空间积分0 信誉积分128 UID7372124阅读权限10积分12帖子精华可用积分14 专家积分0 在线时间12 小时注册时间最后登录
白手起家, 积分 12, 距离下一级还需 188 积分
帖子主题精华可用积分14 专家积分0 在线时间12 小时注册时间最后登录
论坛徽章:0
以下方法解决:
sudo apt-get install gcc-multilib
北京皓辰网域网络信息技术有限公司. 版权所有 京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:
广播电视节目制作经营许可证(京) 字第1234号
中国互联网协会会员&&联系我们:
感谢所有关心和支持过ChinaUnix的朋友们
转载本站内容请注明原作者名及出处c编程中的init函数怎么用?是什么意思?_百度知道
c编程中的init函数怎么用?是什么意思?
提问者采纳
c的标准库中没有这个函数的,你查看下它的定义。应该是程序自己定义,或者在某地方封装过的一个子函数。说说你应用的环境
这个是在单片机中的应用了!上面是用来作为一个初始化函数了!然后再用主函数中调用它!这样写起来的程序看着很整齐!呵呵......你也可以试试呀!!
提问者评价
谢谢了!!!!呵呵.....
其他类似问题
init的相关知识
按默认排序
其他1条回答
来,嵌入式系统的发展在国内可谓如火如荼,很多公司都急需嵌入式系统方面的开发人员。然而,在高校中,嵌入式系统的教学却较为滞后,很多高年级的本科生和刚入学的研究生都苦于不知从何学起。在本文中,笔者将根据自己的嵌入式系统开发和教学经验,简要介绍嵌入式系统的学习方法,力求能帮助初学者找到一条入门之路。什么是嵌入式系统?
学习嵌入式系统,首先应该明确什么是嵌入式系统,否则费力去学,却不知所学为何物,岂不惘然?嵌入式系统的定义很多,这也是困扰嵌入式系统学习的一个因素。笔者根据自己开发和教学过程中的理解,以及对各种嵌入式系统的应用进行总结,提出了嵌入式系统的简单定义:嵌入式系统是嵌入式计算机系统的简称,这个定义突出嵌入式计算机系统和普通计算机系统的共性。下表列出了嵌入式系统的一些典型的应用:智能机器人(S D R 4,火星登陆车)娱乐和消费电子(Gameboy Advance,Sony PSP)网络通信产品(Smartphone)军用设备(军用PDA )汽车(车载导航,自动驾驶,娱乐系统)智能仪器(虚拟仪器)安全防护(防火,防盗)环境保护(探空气球)银行和商业消费(ATM)以火星登陆车为例来分析一下嵌入式系统的定义。火星登陆车虽然听起来感觉在技术上有些高不可测,但是本质就是嵌入式计算机系统的应用,其核心就是一个计算机系统,而这个计算机系统的组成同传统的计算机系统在本质上没有什么差别。两者的显著不同之处就在于,用于火星登陆车的计算机系统被安装到了火星登陆车上。当然,一个计算机系统能够被安装在火星登陆车上,是需要进行很多特殊设计的。但是从本质上讲,嵌入式系统的核心概念还在计算机系统。嵌入式系统学习的重点也在计算机系统上。一方面,学习者需要牢固掌握计算机系统本身的概念,更重要的是学习嵌入系统的开发过程同传统计算机系统开发过程的差别。这里需要指出的是,很多学习者本来就没有从事过完整计算机系统的开发,高校的教学是以程序设计为中心的,计算机系统的构成,操作系统的原理,编程语言等课程都是为了能够让学生更好的使用计算机系统进行程序设计,在现有的计算平台上来设计实现各种应用,学生一般没有机会学习一个完整的计算机系统是如何构建,并亲身参与到构建的每一个过程。而对于嵌入式系统而言,从事平台开发的人就是要亲自去开发出一个完整的计算机系统,这个过程包括l 需求分析2 硬件设计3 驱动程序4 Bootloader & BSP (板级支持包)5 操作系统的移植6 应用程序的开发7 性能检查嵌入式系统教学的目的就是教会学生如何根据需求去建立满足某种特殊行业需求的嵌入式计算机系统。让学生学会如何构件硬件平台,进行硬件设计,选择能够满足应用要求的最佳的嵌入式操作系统,并完成Bootloader,BSP 和驱动程序的编写,移植,调试等过程。为了满足行业需求,最终要在所建立的系统上编写调试相应的应用程序,并进行性能的测试和检查。你是谁,你需要学习哪些东西?
如果你的工作只是需要在PC 机上编写一个图片浏览程序,那么你就没有必要去了解当系统收到一个ARP 请求包后应该如何回应。同样的道理,嵌入式系统的学习也是有很多方面的。就嵌入式系统的设计和实现而言,基本上需要四种不同的工作:系统设计工作,硬件设计工作,驱动程序和操作系统移植工作和应用程序设计开发工作。系统设计工作
在系统的设计阶段,系统分析师将根据需求确定系统的硬件的基本构成,根据系统的需求选择使用那种处理器,使用哪种操作系统,使用那些软件开发工具。系统分析师往往是较为完整的参与过嵌入式系统设计的全过程,对于系统应用的行业较为了解,对于嵌入式系统本身的开发流程十分清楚的人。硬件设计工作
系统硬件设计人员需要根据系统分析师的设计结果,进行硬件原理图的设计。通常需要硬件设计人员熟悉嵌入式系统的硬件构成。硬件设计人员需要了解常用的嵌入式系统处理器,存储器(Flash,SDRAM),以太网MAC芯片,音频/ 视频编解码芯片,电源管理芯片,总线接口电路 (USB, PCI),液晶显示模块,可编程逻辑器件(FPGA/CPLD),无线网络通信模块(Bluetooth, WLAN,GPRS)等硬件电路构成元素的基本工作原理,连接使用方法,使用注意事项,基本调试方法等内容。在网络上能找到很多公司的评估板的原理图,对于这些原理图要仔细研究,摸清处理器同存储器,网卡,液晶模块等器件的连接方法和原因。通过对这些电路的研究,能够较快地了解整个嵌入式系统的构成,这些电路同实际产品中的电路虽有一定差别的,特别是对于手持设备,但这些差别不影响初学者学习嵌入式系统的硬件设计基本构成。
以上这些知识,往往需要较长时间的学习和积累,需要亲自参与实践的机会。对于刚刚接触嵌入式系统硬件开发的学生来讲,一般不可能全部了解这些知识,但也不会是通通一无所知。笔者结合自己开发和教学的经验认为:首先应该选定一款主流且较为简单的嵌入式系统处理器,比如基于ARM7TDMI 内核的AT91M4B0 等嵌入式系统处理器,学习32 位RISC 处理器的编程模型,指令集。高校教学中,单片计算机课程一般以8051系列单片为核心讲解,由于现代32位处理器的结构和开发方式同8 位单片机有着较大的差别,学习者还是需要花一点力气来研究以下32 位处理器的。以ARM处理器为例,学习者就需要理解处理器的多种工作模式,备份寄存器,RISC 指令集的特点,MMU 和虚拟地址,中断处理过程等内容。在学习指令集的过程中,最好能够每学习几条指令,就使用这几条指令在模拟器上实验以下,观察处理器执行的结果。这个过程一方面是学习者对于指令本身的学习能够取得一个比较好的效果,另外也是对开发工具本身的一种学习。接着,就可以开始学习片上资源的使用和配置方法。这时就需要一个方便使用的开发板,学习者能够通过JTAG 仿真器将开发板同调试PC 机相连,进行程序的下载,调试。特别是要仔细研究系统的初始化过程和中断处理的过程。在开发过程中如果遇到问题,应自己分析问题产生的原因,通过分析缩小问题可能产生的范围,最终找到问题的所在。最重要的就是要保持一种解决问题的信心,面对困难如何处理,往往能够决定最终系统是否能够调试成功。然后,学习者可以开始仔细学习处理器同存储器的连接,存储空间的配置,各种外扩器件,如网卡,AC97声卡的工作原理和使用方法。嵌入式系统硬件设计中往往需要使用可编程器件,学习者还需要一定的时间来学习使用常用的可编程器件(C P L D / F P G A ),常用的有Xilinx和Altera公司的产品。进行系统硬件原理图设计,就需要使用原理图设计的E D A 工具,常用的E D A 原理图设计工具主要包括Cadence公司的Capture,Protel公司的Protel99 SE等。接下来就可以参照评估板的电路图,根据系统的设计要求,开始进行原理图的绘制了。在原理图绘制过程中,一定要搞清评估板电路连接的原因,对于一时没有搞清楚的问题切不可蒙混过关。例如,有些处理器的地址线是以字节位单位的,而另一些处理器的地址线则是以两个字节为单位的,当连接16 位的存储器的时候,切不可想当然的把处理器的A 0 直接连接到存储器的A 0 上面。另外,学生还应具有一定的P C B 板图绘制能力,因为在现阶段,很多公司还不能完全把原理图的设计工作和PCB 的绘制工作分开,往往要求硬件设计人员既能进行原理图设计又能进行板图设计。即使是PCB设计和原理图设计分开的公司,也需要原理图设计者能为PCB 的设计者对于不同的信号提出布板要求。驱动程序和操作系统移植工作
现代嵌入式系统的开发同传统8 位单片机系统的开发相比,一个显著的区别就是嵌入式操作系统的广泛使用。在拿到焊接完毕的电路板,并进行基本的测试后,就要进行驱动程序和操作系统的移植工作了。首先要进行的Bootloader的编写和移植工作。Bootloaer相当于PC系统的BIOS。对于有些嵌入式操作系统,如uc/OSII 没有bootloader同样可以开发调试。但是对于Windows CE和嵌入式linux系统而言Bootloader就是必须的了。本文以Windows CE 为例,做一个简要的说明。
Windows CE 系统的移植工作主要就是BSP(板级支持包)的开发过程。B S P 将具体的硬件差异同操作系统的核心隔离开来,主要由Bootloaer ,OAL (OEMAbstractionLayer)和设备驱动程序三部分组成。WindowsCE系统中Bootloader叫做Eboot。Eboot被写入系统的引导Flash。系统启动时运行 Eboot,完成通过网卡将调试PC 机中Windows CE 操作系统映像下载到目标系统的S D R A M 中并开始执行的功能。对于一个系统移植人员,首先需要阅读文档,了解Windows CE系统Bootloader和BSP的基本概念和开发过程。(呵,还要做这工作啊,我还没想到(初学^_^))Windows CE的开发系统Platform Builder提供了详细的文档和例程,开发人员需要仔细的阅读文档和例程。搞清楚各个函数之间的调用关系。在开发过程中的一个重要的步骤就是打通串口,使得目标板能够通过PC 机串口向调试PC 机发送数据。由于A R M 系统的仿真器比较昂贵,而且操作系统的调试往往不使用JTAG 调试器进行单步调试。所以能从串口观察程序的执行过程和结果对于调试就显得十分重要了。串口打通之后一个比较棘手的问题就是网卡芯片的调试。刚刚接触嵌入式系统开发的人往往没有直接在寄存器级上使用网卡芯片的经验,而网卡芯片的说明一般都较为简短,这就要求开发者学习一些以太网的基础知识,对以太网的 MAC 层有一个基本的认识。另外,各种网络调试(抓包)工具的使用也能大大降低系统调试的难度。系统的O A L 需要根据具体硬件的不同做出相应的修改,这个部分可次参照文档进行,在调试过程中根据串口的信息分析出错的地方。要充分发挥跨文件字符串搜索工具的功能,在浩如烟海的源文件中找到出错的位置。当然,随着开发者对系统文件目录结构的熟悉和了解,错误定位的速度会不断加快。Windows CE 的驱动程序相对而言是比较好写的。程序结构较为简单,学习者可参照
MSDN Home & MSDN Library &Mobile and Embedded Development & Embedded OperatingSystem Development & Columns SPOT the Geek and WindowsCE Drivers 这篇文章。应用程序的开发
嵌入式系统的应用程序开发同在PC 机上开发应用程序的区别不是很大。对于W i n d o w s C E 系统而言,Microsoft已经提供了较为完善的开发工具。特别是.NET Compact Framework 的使用,使得基于Windows CE.NET Compact Framework的应用程序有了跨平台性。开发人员可以使用Windows 的C# 语言直接在PC 上进行CE .NET应用程序的开发和模拟调试,也可将目标系统同PC 机相连,进行联机调试。现在有很多系统支持J2ME(JAVA 的嵌入式系统版本) ,这使得JAVA 在嵌入式系统应用开发中占有较大的优势。另外,作为专业的嵌入式系统软件开发人员,还需要充分了解面向对象技术和设计模式等方面的知识,当然作为初学者可以先不深入研究这方面的内容。常用嵌入式系统处理器和操作系统处理器
常用嵌入式系统处理器主要包括A R M 处理器,Power PC 处理器,基于MIPS 内核的嵌入式处理器,软核处理器(如Alter 的Nios和Xilinx的MicroBlaze等)和D S P(数字信号处理器)等。A R M 处理器的主要特点是具有较高的性能功耗比。A R M 处理器被广泛的应用在手机,P D A 等领域,其中较为著名的有Intel 公司生产的基于ARM 内核的XScale系列处理器。由于所有公司生产的基于ARM 内核的处理器具有相同的编程模型,在手持和电池供电的系统中,基于A R M 的嵌入式系统处理器往往被首先选用。PowerPC (简称PPC)处理器具有较强的运算性能和数据吞吐能力,在网络和数据通信领域基于PPC 的嵌入式系统处理器有着广泛的应用。其中Motorola公司生产的MPC860/MPC8260 被大量地应用在嵌入式网络产品中。MIPS 处理器的特点表现在十分强大的处理能力上。作为高性能处理器,MIPS 处理器适用于网络、企业及高级消费类电子应用,特别是在机顶盒系统中,MIPS 处理器具有较高的市场占有率。随着可编程器件的规模不断扩大,使得人们能够根据需要定制处理器,并方便的将针对某种特殊应用定制的处理器方便的在可编程器件内部实现。除了处理器外,计算机系统还需要许多其他构成部分,比如在多通道媒体数据处理系统中,经常需要使用可编程器件来实现高速的数据处理功能,使用软核DSP 来实现复杂的数字信号处理算法,同时还需要处理器进行事务处理,软核处理器将可编程器件,D S P 同处理器结合在一起,为系统级设计提供了极大的灵活性。D S P (数字信号处理器)有别于通用处理器,集中表现在其强大的数字信号处理能力上。在DSP 内部提供了硬件乘累加器,处理器在设计上对于特殊的寻址方式做了优化,一些DSP 还支持零耗循环(Zero OverheadLoop)。为了方便嵌入式系统设计,主流DSP 一般也都提供了丰富的外设。特别值得一提的是A D I 公司的Blackfin 系列DSP 和TI 公司的DM64X 系列DSP,两种处理器都提供了丰富的片上外设,非常适用嵌入式系统应用。操作系统Window CE.NET/5.0作为Microsoft的产品,Window CE.NE/5.0提供了功能完备的平台开发工具Platform Builder和应用开发工具Embedded Visual C++/Visual Studio 2003。Windows CE由于拥有广大使用者所熟悉的windows 界面,系统提供了众多驱动程序,并且有完备的文档支持。对于应用开发而言,熟悉Windows 系统开发的程序员很容易转到WindowsCE 应用程序的开发。Windows CE将会是一个非常有前途的嵌入式操作系统。VxWorksVxWorks 是由Windriver(风河)公司出品的嵌入式实时操作系统,大名鼎鼎的火星登陆车就是使用了VxWorks。Windriver 为VxWorks 提供了集成开发环境tornado。υC/OSIIυC/OS是由Jean Labrosse设计编写的开放源代码的嵌入式实时操作系统,笔者最早接触的嵌入式操作系统就是它。阅读并深入理解υ C/OS 的源代码对于理解实时系统是大有裨益的。ARM LinuxARM linux是由Russell King和其他开发者开发移植的用于ARM 处理器的linux操作系统。 ARM Linux系统在GNU GPL下发布。有兴趣的读者可以参看的介绍。υ CLinuxυ Clinux 是适用于没有MMU 的嵌入式处理的LinuxOS 版本。υ Clinux 同样在GNU GPL 下发布,有兴趣的读者可以参看嵌入式系统开发过程中的常见问题和解决方法Bootloader如何写入Flash ?初学者一般都会遇到如何将程序写入处理器的问题。对于不同的处理器,可以采用不同的方法。例如Intel的Xscale处理器可以使用Intel公司提供的JFlash工具烧写。对于具有JTAG 调试工具软件的处理器,可以使用如下思路:编写一段程序,这段程序能将位于SDRAM/SRAM 固定地址中的数据写入Flash 中。烧写时,首先,将这段软件下载到SDRAM 中,然后通过调试软件将要写入Flash的数据下载到S D R A M / S R A M 的某个固定地址开始的缓冲区,然后通过调试器开始执行程序,将数据写入Flash。除此以外,网络上还提供了很多专用的写Flash的工具,开发者可以根据自己的需要选用。(现在明白了我在学的那个BF533为什么先下个flashProgramer.dxe先了)什么是arm-elf-gcc?arm -elf-gcc是一个交叉C语言编译器。我们在PC平台下编译程序,编译器运行的处理器同生成的代码将要运行的处理器相同。但是,在PC 机上编译ARM 程序时,编译器运行的处理器同生成的代码运行的处理器不同,这种编译器叫做交叉编译器。其中的elf是指编译器生成的目标文件格式。(其实我们平时用的单片机编译器如GCC—AVR等已是交叉编译器了,我到现在才弄清楚什么是交叉编译器)走了哪条编译路径?系统程序和驱动程序往往包含很多的编译选项,很多选项都是在编译时通过命令行定义的,如果想知道编译的是那一段程序可以使用如下的方法:#ifdef PLAT_AAA#error Code for Platform AAA#else#error Code NOT for Platform AAA#endif这样在编译的时候就知道,编译的是哪一条路经了。对于支持#pragma message( “I am here”)的编译器也可使用#pragma message预编译指令。我怎么知道那段代码在那个文件中?系统编程中经常需要使用在多个文件中搜索字符串,在windows平台下可以使用平台提供的多文件字符串搜索工具。在linux平台下,可以使用grep来搜索字符串。Grep 的搜索功能十分强大,支持正则表达式搜索,熟练使用grep对于阅读系统和驱动程序代码是很有帮助的。系统是从那个文件开始运行的?对于W i n d o w s C E 系统,一般从W I N C E 4 2 0 \PLATFORM\YourPlatform\KERNEL\HAL 目录的某个汇编文件中。对于Linux 系统版本不同会存在一定差异,以arm处理器为例,一般会在linux2.4.x\arch\arm\kernel的head-armv.S中。程序执行到了那里?可以在程序中插入如下代码来实现printf( “I am here %s, %d\n”,__FILE__, __LINE__);代码将打出printf语句所在的文件名和行号。推荐书目Jean J.Labrosse MicroC/OS-II The Real-Time Kernel,Second Edition这本书是笔者接触嵌入式实时系统的入门书,在国内能够买到中文版。这本书较为清楚地讲述了实时系统的概念,各个组成部分的工作原理,特别是公开了实时系统内核的源代码,仔细研究定会受益匪浅。有个小的提示,对于初学者,这本书可以先不看第一章,直接从第二章看起。Abraham Silberschatz, Peter Baer Galvin,Greg Gagne Operating System Concepts笔者在教学过程中发现,无论是计算机还是电子工程专业都有很多学生对于操作系统的基本概念都没有搞清,很少有学生有完整的系统编程经验。Operating SystemConcepts这本书对操作系统的感念讲述只能用经典来形容。对于嵌入式系统有兴趣深入研究的同学,首先要把基础打好,这本书就成了必读之物了。Andrew S. Tanenbaum Computer Networks提起Andrew S. Tanenbaum 学习计算机的同学一定都知道OPERATINGSYSTEMs:Design and Implementation这本书,笔者对于Tanenbaum 这样的教授由衷佩服。网络协议栈是嵌入式系统中的支柱性组成部分。愿意致力于网络深层技术研究的同学,这本书将你们建立一个坚实的网络基础。Karim Yaghmour Building Embedded Linux Systems本书详尽的介绍了嵌入式linux系统的组成,基本概念和如何去建立各个部分。全书篇幅较小,可谓短小精悍。即可以作为嵌入式linux 系统的入门读物,又是开发过程各个部分的指南。Advanced RISC Machines Ltd (ARM) ARM7 TDMIData SheetAdvanced RISC Machines Ltd (ARM) ARM920TTechnical Reference Manual学习嵌入式系统不了解当前应用最广泛的嵌入式处理器怎么行? ARM7 TDMI 的 data sheet是学习ARM编程模型,指令集的好东西。在嵌入式系统中,M M U (内存管理单元)是很重要的部分,又是较难理解和掌握的部分。ARM920T Technical Reference Manual 正好可以帮你讲解这方面的内容。Perter Van Der LinDen Expert C Programming嵌入式系统级编程最常用的语言还是C 。很多同学都自认为自己的C 语言学的很好,那好,就看看这本书吧,找找自己和Experts差距。注:这篇文章是我在2004年第12期的学习园地看到的。文章的作者是袁通作者简介袁通,北京工业大学实验学院嵌入式系统课程教师,曾于2 0 0 4 年以访问学生身份工作于微软亚洲研究院。看完这篇文章后,我就迫不及待得贴出来,因为确实是写的好啊。我搞嵌入式一年多了,从8051到ARM,学习过,彷徨过,高兴过,郁闷过。。。近来甚至有放弃的想法,终归到底是对嵌入式开发认识不全面造成的,一开始就一头钻到技术里,学习各种技术,最终迷失在自己一手造成的泥坑里。这篇文章非常清晰的讲述了嵌入式开发的方方面面,对我这样迷惑的人起到了醍醐灌顶的作用。嵌入式开发与桌面开发既有不同,又有非常大的联系,而且十分注重实际操作能力。搞桌面开发的人在一开始接触嵌入式的时候,通常转换不过来,这主要体现在定位上。如文中所说,你是谁,你要做什么?我对硬件的了解仅限于编程领域,PCB设计一窍不通,但并不能说你不懂硬件就不能从事嵌入式开发。一个系统的开发设计方方面面,在自己感兴趣和熟悉的领域做出自己的贡献才是最主要的。1。硬件设计: 需要有硬件设计的经验,对各种嵌入式器件有很好的了解。2。系统移植:需要汇编经验,操作系统原理以及底层驱动的了解3。应用程序:需要桌面编程经验
??????????
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 else的用法 的文章

 

随机推荐