我这个程序编译没错,运行就停止,为什么要编译内核啊

求助:程序编译没错,但每次运行都出现停止工作_c++吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:183,032贴子:
求助:程序编译没错,但每次运行都出现停止工作收藏
是进行堆运算代码如下#include &iostream&class Stack{public: Stack(int num); void Push(int i) {
add=add+1; } void Pop() {
add=add-1;
cout&&a[add]&& } void IsEmpty() {
if(add==0)
cout&&"This Stack is Empty"&& } void IsUpll() {
if(add==length)
cout&&"This Stack is Full"&& }private: int *a;};Stack::Stack(int num){
a=new int[num];
int add=0;
int length=}void main(){ Stack t(3); t.Push(1);
t.Push(2); t.Push(3); t.IsUpll(); t.Pop(); t.Pop(); t.Pop(); t.IsEmpty();}
Stack::Stack(int num){a=new int[num];int add=0;int length=}这个构造函数的问题 int add = 0; int length =这是在这个函数里面又定义了两个局部变量 并且覆盖了类的成员add length;改成add = 0; length =就行了!
谢谢,已成功
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或&& 查看话题
原来编译的siesta突然不能用,重新编译没错,运行出错
前几天才尝试用gfortran和mpich2编译siesta,通过了,并且在test目录和example、目录下都能够计算得到差不多的结果。由于当时安装的mpich2用的是mpd,后来改用新版的mpich2换hydra作为进程调度的系统,于是重新编译了一下:这次尝试用ifort10+mpich2,编译过程没什么错误,但是在test目录下make,得到的错误如下:
>>>> Running h2o test...
& & ==> Copying pseudopotential file for H...
& & ==> Copying pseudopotential file for O...
& & ==> Running SIESTA as ../../../Src/siesta
forrtl: severe (174): SIGSEGV, segmentation fault occurred
Image& && && && &&&PC& && && && && & Routine& && && && &Line& && &&&Source& && && && &
libmkl_mc3.so& && &C4CF8F&&Unknown& && && && && &Unknown&&Unknown
make: ***&&Error 174
于是我将可执行文件拷贝到第一次正确运行(gfortran编译成功那次)的目录,再次&&./siesta<h2o.fdf时确保错了,如下:
initatom: Reading input for the pseudopotentials and atomic orbitals ----------
Species number:& && && && &1&&Label: O Atomic number:& && && &&&8
Species number:& && && && &2&&Label: H Atomic number:& && && &&&1
Ground state valence configuration:& &2s02&&2p04
Reading pseudopotential information in formatted form from O.psf
Semicore shell(s) with -5 electrons included in the valence for
Ground state valence configuration:& &1s01
Reading pseudopotential information in formatted form from H.psf
O& && && && && && &&&must be in PAO.Basis (it has semicore states)
Stopping Program from Node:& & 0
application called MPI_Abort(MPI_COMM_WORLD, 1) - process 0
: aborting job:
application called MPI_Abort(MPI_COMM_WORLD, 1) - process 0
不明白啊,为啥编译没问题,运行却出错??
还有曾经还编译出一个版本,在前台可以算,rocks集群系统交到后台有进程,但是不计算,郁闷啊。
这个程序真是让人纠结 安装相对于用户这么不友好 我为了装它导致其他程序都无法运行了 还得重装系统 Originally posted by identation at
这个程序真是让人纠结 安装相对于用户这么不友好 我为了装它导致其他程序都无法运行了 还得重装系统 哎,确实啊。
我是帮人编译,不用他的,问题多多。。 貌似mkl库的问题。
linux就是通过牺牲用户体验的方式来保证程序在不同的CPU上都能够高效率运行。设计理念与windows是完全不同的。 Originally posted by dxcharlary at
貌似mkl库的问题。
linux就是通过牺牲用户体验的方式来保证程序在不同的CPU上都能够高效率运行。设计理念与windows是完全不同的。 嗯,我重新写了一下调用mkl库的arch.make文件,现在貌似可以了。
明天去天河上面编译一下试一试。 Originally posted by hnuzhoulin at
嗯,我重新写了一下调用mkl库的arch.make文件,现在貌似可以了。
明天去天河上面编译一下试一试。 顺便问一句,天河上面能用vasp或者MS吗? Originally posted by dxcharlary at
顺便问一句,天河上面能用vasp或者MS吗? 可以啊,我们就在上面用着呢,呵呵。
在这里编译siesta的时候,编译能够通过,在test目录下面也是可以计算的。但是在测试某些比较大的体系的时候会出现segmentation fault的问题。。
是否需要重新安装mkl库? /home.php?mod=space&uid=378442&do=blog&id=391611
能解决你的问题 贴出你 的arch.make,看看 : Originally posted by guohuazhong at
贴出你 的arch.make,看看 抱歉,对应的文件在科大,没带回来。。明天贴出来。。
我觉得编译没问题,因为在前台是可以算的啊,是不死MPI的问题, : Originally posted by guohuazhong at
贴出你 的arch.make,看看 #
# This file is part of the SIESTA package.
# Copyright (c) Fundacion General Universidad Autonoma de Madrid:
# E.Artacho, J.Gale, A.Garcia, J.Junquera, P.Ordejon, D.Sanchez-Portal
# and J.M.Soler, .
# Use of this software constitutes agreement with the full conditions
# given in the SIESTA license, as signed by all legitimate users.
.SUFFIXES:
.SUFFIXES: .f .F .o .a .f90 .F90
SIESTA_ARCH=x86_64-unknown-linux-gnu--Intel
FPP_OUTPUT=
RANLIB=ranlib
KINDS=$(SP_KIND) $(DP_KIND)
FFLAGS= -O2 ###-i-static
#DUMMY_FOX= --enable-dummy
FFLAGS_DEBUG= -g -O2
FPPFLAGS= -DMPI -DFC_HAVE_FLUSH -DFC_HAVE_ABORT
ARFLAGS_EXTRA=
FCFLAGS_fixed_f=
FCFLAGS_free_f90=
FPPFLAGS_fixed_F=
FPPFLAGS_free_F90=
BLAS_LIBS=-L/vol6/intellib/mkl -lmkl_solver_lp64 -lmkl_intel_lp64 -lguide -lpthread
LAPACK_LIBS=-L/vol6/intellib/mkl -lmkl_lapack95_lp64&&-lmkl_sequential -lmkl_core -lpthread
BLACS_LIBS=-L/vol6/intellib/mkl -lmkl_blacs_lp64 -lpthread
SCALAPACK_LIBS=-L/vol6/intellib/mkl -lmkl_scalapack_lp64 -lpthread
COMP_LIBS=dc_lapack.a&&liblapack.a libblas.a
NETCDF_LIBS=
NETCDF_INTERFACE=
LIBS=$(SCALAPACK_LIBS) $(BLACS_LIBS) $(LAPACK_LIBS) $(BLAS_LIBS) $(NETCDF_LIBS)
#SIESTA needs an F90 interface to MPI
#This will give you SIESTA's own implementation
#If your compiler vendor offers an alternative, you may change
#to it here.
MPI_INTERFACE=libmpi_f90.a
MPI_INCLUDE=/vol6/home/caeuser/wangyuhu/soft/mpi_default/include
#Dependency rules are created by autoconf according to whether
#discrete preprocessing is necessary or not.
& & & & $(FC) -c $(FFLAGS) $(INCFLAGS) $(FPPFLAGS) $(FPPFLAGS_fixed_F)&&$<
& & & & $(FC) -c $(FFLAGS) $(INCFLAGS) $(FPPFLAGS) $(FPPFLAGS_free_F90) $<
& & & & $(FC) -c $(FFLAGS) $(INCFLAGS) $(FCFLAGS_fixed_f)&&$<
& & & & $(FC) -c $(FFLAGS) $(INCFLAGS) $(FCFLAGS_free_f90)&&$< :shuai: 事实上,俺也遇到相似的问题了,提示的是libmkl_def.so有问题。使用的是ifort 12,后来去掉了arch.make中忘记做了哪些修改,总算得到了能计算的,使用的库为:
-lmkl_blacs_lp64 -lmkl_sequential -lmkl_intel_lp64 -lmkl_def -lmkl_core -lmkl_scalapack_lp64 -lpthread
但是编译后又出现了问题,那就是串行计算一切正常,但是并行时就会提示
Fatal error in PMPI_Comm_size: Invalid communicator, error stack:
PMPI_Comm_size(111): MPI_Comm_size(comm=0x5b, size=0xca600c) failed
PMPI_Comm_size(69).: Invalid communicator
我使用的是MPICH2,用ifort 12编译的。已经顺利的用在VASP 5.2,Quantum-ESPRESSO v4.3.1,ELK 1.3.31,Exciting Code He及Abinit v6.8.1上了,都没啥问题,怎么会偏偏在Siesta上就挂了呢……
有没有也碰到这样的问题的……Siesta的编译还真折磨人~ 这样的问题很常见,我经常出现这样的问题,原因是用不同mpi编译不同的软件,在运行的不同的软件就需要改变mpi的环境变量,如果没改就是出现这样的问题。你把你的有关mpi的环境改成你编译用的mpi就行了。有时还要清除原有的环境变量(比较危险,如果自己不懂的话不建议使用),然后加入新的 : Originally posted by hnuzhoulin at
可以啊,我们就在上面用着呢,呵呵。
在这里编译siesta的时候,编译能够通过,在test目录下面也是可以计算的。但是在测试某些比较大的体系的时候会出现segmentation fault的问题。。
是否需要重新安装mkl库? 这个问题我也碰到了,现在已经解决。下面是解决方法,我也是转来的。你看看是否有用。
修改系统资源的限制,把以下语句写在.bashrc的最后
# set unlimited stack size
ulimit -s unlimited
选那一个取决于你的Linux系统。你自己试一下就知道。c语言源程序在编译,链接,运行时,可能发生的错误类型有哪些?_百度知道
c语言源程序在编译,链接,运行时,可能发生的错误类型有哪些?
刚毕业迷茫我幸运我遇我幸福星非牛其实CC++想编程入门语言要走条路要准备做受打击准备两门语言确难要至少要四五才能做些东西俩都底层打交道所要考虑计算机硬件些东西除外要懂任何事都难肯定山牛看看美微软程序员搞底层发两门语言做C要谭浩强《C程序设计》每道题练熟定要记自编才看懂永远于C++练编程逻辑思维让面向象思想要做停思考等完试着朝B/S模式发应用发展我意见我觉咱现挣钱主其再说觉呢祝业给说问题百度见
其他类似问题
为您推荐:
您可能关注的推广
c语言的相关知识
其他2条回答
太理论吧N错误
编译时的词法,语法,语义错误;连接时一般不会出错,那是由编译程序负责重组你的代码,加入一些控制类的代码运行时也会有错误,那是在编译时未检测出来的,动态运行错误个人理解,欢迎讨论
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁在C++中运行程序,为什么在编译时没有问题,但是回到程序的执行时,就会出现程序崩溃的情况???-中国学网-中国IT综合门户网站
> 在C++中运行程序,为什么在编译时没有问题,但是回到程序的执行时,就会出现程序崩溃的情况???
在C++中运行程序,为什么在编译时没有问题,但是回到程序的执行时,就会出现程序崩溃的情况???
转载 编辑:李强
为了帮助网友解决“在C++中运行程序,为什么在编译时没有问”相关的问题,中国学网通过互联网对“在C++中运行程序,为什么在编译时没有问”相关的解决方案进行了整理,用户详细问题包括:#include&}void creat_Binary_Tree()&#47,int k){Bitnode *q;&gen-&gt,2);&lt!; depthRight= Depth( T-&}return 0;cout&&map&lchild=NULL;intrav(gen),1); depthRint creat(Bitnode *p;&lt:&&d&lt,0)!&&creat_Binary_Tree();}int intrav(Bitnode *gen)&#47;&前序遍历{if(lchild);&lt, count);if(k==2) p-&intrav(gen-&int Depth (Bitnode * T ){ if( 这是一个二叉树的链表构造程序; cout&& struct Bitnode * pretrav(gen);&x;节点总数的计算{if(T) {count=count+1;cout&rchild=NULL;q-&gt,*rchild=NULL;构造二叉树链表结构{DataT#&#39;endl,1);sum&;&后序遍历{if(&&lchild): depthRight)!;}BitTgen-& CountLeaf( depthval = 1 + (depthLeft &Bitnode *&&lt, count);cout&lt,一到“节点数的运算”;if(x==&#39;cout&}void CountLeaf (Bitnode * T;}int pretrav(Bitnode *gen)&#47;gen-&gt!=NULL){intrav(gen-&&#47;rchild);)&lt,而且程序能成功运行“前序;d=x;中序遍历{if(#&#39;iostream&}return 0;rchild ),并且输出正确答案;前序遍历;;}int main(){cout&} & else{ depthLeft = Depth( T-&&&}int postrav(Bitnode *gen)&#47;&#47;&&&typedef char DataT& postrav(gen-&int depthR &lchild=q;creat(&q-&rchild);&#47!=&#39;lchild );return 0; sum=count!=NULL){postrav(gen-&&lt, int count)&#47; CountLeaf( T-&后序遍历;&#47;x;&#47;&#47,中序;gen=new B&lt:&&#47;&){q=new Bq-&pretrav(gen-&DataType x!;&quot!;gen-&gt:&,就会系统崩溃;}return 0;} return depthval!;lchild);}return 0;typedef struct Bitnode{ DataTlchild=NULL; &quot!=NULL){cout&gen-&if(k==1) p-&gt,2)!? depthL&请输入;深度计算int depthLeft,后序”遍历;creat(creat(q:&d&中序遍历!!!T ) depthval = 0;creat(q;cout&cin&&节点总数为;} CountLeaf( T-&cin&cout&pretrav(gen-&gt。#include& cout&cout&&if(x;postrav(gen);&#47;rchild=q;rchild);&#47;&&gen-&d&&&&根节点d=x,具体解决方案如下:解决方案1:虽然已经足够只智能,当然也有部分野引用问题也会造成运行时崩溃。前者可以参考 effective C++ 系列和imperfect C++这些书。用返回值又不会怎么样……CountLeaf( T-&gt编译器又不是万能的,在函数内部使用全局自动变量是非常危险的:Bitnode *rchild。所以要依靠代码风格解决这些问题,但是对于一个传递了无数次的指针是否仍然有效或者传递过一次以上的数组的范围等问题编译器是做不来的(其实并不是做不来;lchild, count);根节点int sum, count),只是为了效率很少去做这些事。所以你要通过改变编程风格或者确保每次进行内存的相关操作的时候尽力谨慎。其中最常见的是数组访问越界和野指针问题;/全局变量只在本文件有效;/ CountLeaf( T-&gt,你总不希望一个程序编译一天吧)。另外你编写的代码有很大的问题解决方案2:谢谢!解决方案3:数组越界访问或者使用了一个指向null的指针 这些都是运行时错误,编译检查不出来通过对数据库的索引,我们还为您准备了:问:这是一个二叉树的链表构造程序,而且程序能成功运行“前序,中序,后序”...答:编译器又不是万能的,虽然已经足够只智能,但是对于一个传递了无数次的指针是否仍然有效或者传递过一次以上的数组的范围等问题编译器是做不来的(其实并不是做不来,只是为了效率很少去做这些事,你总不希望一个程序编译一天吧)。所以要依靠代...===========================================问:我下载了一个visual&#160;c++6.0企业版但编译没问题的程序就是无法执行~...答:有这种事? 或许被360当病毒给杀了,你把安全软件全都退出了再编译运行试下===========================================问:题目:输入字母,逆序建立链表,并通过链表来统计大写字母数 程序如下:...答:#include "iostream.h" struct node { struct node * }; struct node *create(int n) { struct node *head,* head = head-&next = NULL; for(i=0;i&x; newnode= newnode-&date = ...===========================================问:求大师指点,为什么会这样的答:编译通过只是说明没有语法错误,运行不出结果就是你代码逻辑问题了 贴代码看看吧,自己打断点调试一下 while(r=!0) 写反了吧, r != 0 否则就成死循环了。。。===========================================问:#include &stdio.h& void mian() { int num=18; int c=0; prin...答:你好! 主函数 main 写错了 ===========================================问:#include&iostream& class clock { private: int ...答:提出以下错误: #include。 int main()没给返回值。 ===========================================问:要求输入一个三维数组计算和并输出最大和最小 #include&iostream.h&void...答:你要学会自己测试,这么多行的程序,别人看起来也很费劲。 自己测试的思路基本是由少到多,步步为营:你把后面的程序注释起来,先运行前面的,没有问题了再增加一行或者几行,这样一般可以确定在哪一条语句执行的时候出现了问题。 另外,你可以...===========================================问:前些天装了vs2010并用c++编译器编写了一个c++程序,编译通过后 找到工程...答:编译的时候选择静态连接===========================================问:下载了一个visual&#160;c++6.0企业版但编译没问题的程序就是无法执行~~~...答:有这种事? 或许被360当病毒给杀了,你把安全软件全都退出了再编译运行试下===========================================中有一步操作就是将源文件(.cpp)中#include包含的头文件插入到源文件(大概这个意思,说的不太准确,但大体含义是这个意思)。这些主要是编译方面的东西。所以提示没有类成...===========================================你的程序中,使用fprintf相关函数了,但是传送的指针是个空值!检查一下代码=========================================== 你能不能把你出现问题的源代码贴上来 否则 我们也无法还原你的错误 也无法知道你有什么错===========================================程序越界访问内存空间了,注意检查程序中指针值.===========================================那是因为你没有在程序运行完成之后,让程序暂停的语句,所以才会一闪而过。你可以在程序最后加上比如:读一字符的语句等这样只要你不按下键盘,程序就会暂时停止,等待。===========================================程序编译没有错误,只是表明语法检查没有问题了,但是程序的逻辑是否合理、运行是否... 原因,在这里也不好确定。如果程序不长的话,建议对程序进行调试,监测程序的运行状态...=========================================== 请把代码贴出来===========================================编译链接没有错只能说明语法上没有错误。 根据出错信息看,应该是你的程序有非法访问内存的逻辑错误,逻辑错误是不能在编译阶段发现的,只能通过结果调试修改。 如果可...===========================================看看是不是之前处于调试状态的那个c1.exe还没有关掉,关掉再试一次。 如果不是这个原因,看编译按钮(就是那个有两个向下蓝色箭头的工具)是不是可用,如果可用,就是VC6的...===========================================编译器是不会告诉你的。记得我做数据结构课设的时候就是指针指向不对,结果虽然能运行,但是就是不出结果。。好好检查一下吧。书上的例子最好看懂了以后自己默敲在电脑...===========================================
本文欢迎转载,转载请注明:转载自中国学网: []
用户还关注
可能有帮助热门版块:
我这个程序不知道怎么啦,编译没错但仿真不了
#include&reg51.h&
#include&temp.h&
#define uint unsigned int
#define uchar unsigned char
sbit& & K=P1^7;
sbit& &LED=P1^0;
uchar code DIG_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//显示0~9的值
void display(int temp );
void Delay(uint z);
void&&elec(int&&temp);
void main()
&&{& & & && &
& &&&elec(Ds18b20ReadTemp());
& &&&display( Ds18b20ReadTemp());
//显示函数
void display(int&&temp )
&&if(temp&0)
& & & & & & & & temp=temp-1;
& & & & & & & & temp=~
& & & & & & & & P0=0x00;
& && &&&P0=0x40;
& && &&&P2=0x7f;
& && &&&Delay(1);
& & & && & P0=0x00;
& && & P0=DIG_CODE[temp/100];
& && & P2=0
& && & Delay(1);
& & & && & P0=0x00;
& && & P0=DIG_CODE[temp%100/10];
& && & P2=0
& && & Delay(1);
& && &P0=0x00;
& & & && &P0=DIG_CODE[temp%100%10];
& && &P2=0
& && &Delay(1);
& & & && &}
& & & &&&else
& & & &&&{& & & &
& & & && &&&P0=0x00;
& & & &&&& & & & P0=0x00;
& && &&&P2=0x7f;
& && &&&Delay(1);
& & & && & P0=0x00;
& && & P0=DIG_CODE[temp/100];
& && & P2=0
& && & Delay(1);
& & & && & P0=0x00;
& && & P0=DIG_CODE[temp%100/10];
& && & P2=0
& && & Delay(1);
& & & && &P0=0x00;
& && &P0=DIG_CODE[temp%100%10];
& && &P2=0
& && &Delay(1);
& & & && &}
//延时函数
void Delay(uint z)
unsigned&&int x,y;
for(x=z;x&0;x--)
&&for(y=110;y&0;y--);
void&&elec(int&&temp)
& & if(temp&-15)
& & & && & LED=1;
& & & && & Delay(100);
& & & && & LED=0;
& & & && & Delay(100);
& &if(temp&-30)
& & & &&&K=1;
& & & &&&while(temp&-25)
& & & &&&{
& & & &&&K=0;
& & & &&&}
/*******************************************************************************/
#include&temp.h&
/*******************************************************************************
* 函数名& && && &: Delay1ms
* 函数功能& & & & & & & && & : 延时函数
* 输入& && && &&&: 无
* 输出& && && && & & &&&: 无
*******************************************************************************/
void Delay1ms(unsigned int y)
& & & & for(y;y&0;y--)
& & & & & & & & for(x=110;x&0;x--);
/*******************************************************************************
* 函数名& && && &: Ds18b20Init
* 函数功能& & & & & & & && & : 初始化
* 输入& && && &&&: 无
* 输出& && && && & & &&&: 初始化成功返回1,失败返回0
*******************************************************************************/
unsigned char Ds18b20Init()
& & & & DQ=0;& & & & & & & & & & & &&&//将总线拉低480us~960us
& & & & i=70;& & & &
& & & & while(i--);//延时642us
& & & & DQ=1;& & & & & & & & & & & & //然后拉高总线,如果DS18B20做出反应会将在15us~60us后总线拉低
& & & & i=0;
& & & & while(DQ)& & & & //等待DS18B20拉低总线
& & & & & & & & i++;
& & & & & & & & if(i&5000)//等待&5MS
& & & & & & & & & & & & return 0;//初始化失败& & & &
& & & & return 1;//初始化成功
/*******************************************************************************
* 函数名& && && &: Ds18b20WriteByte
* 函数功能& & & & & & & && & : 向18B20写入一个字节
* 输入& && && &&&: com
* 输出& && && && & & &&&: 无
*******************************************************************************/
void Ds18b20WriteByte(unsigned char dat)
& & & & unsigned int i,j;
& & & & for(j=0;j&8;j++)
& & & & & & & & DQ=0;& & & & & & & & & & & & //每写入一位数据之前先把总线拉低1us
& & & & & & & & i++;
& & & & & & & & DQ=dat&0x01; //然后写入一个数据,从最低位开始
& & & & & & & & i=6;
& & & & & & & & while(i--); //延时68us,持续时间最少60us
& & & & & & & & DQ=1;& & & & //然后释放总线,至少1us给总线恢复时间才能接着写入第二个数值
& & & & & & & & dat&&=1;
/*******************************************************************************
* 函数名& && && &: Ds18b20ReadByte
* 函数功能& & & & & & & && & : 读取一个字节
* 输入& && && &&&: com
* 输出& && && && & & &&&: 无
*******************************************************************************/
unsigned char Ds18b20ReadByte()
& & & & unsigned char byte,
& & & & unsigned int i,j;& & & &
& & & & for(j=8;j&0;j--)
& & & & & & & & DQ=0;//先将总线拉低1us
& & & & & & & & i++;
& & & & & & & & DQ=1;//然后释放总线
& & & & & & & & i++;
& & & & & & & & i++;//延时6us等待数据稳定
& & & & & & & & bi=DQ;& & & &&&//读取数据,从最低位开始读取
& & & & & & & && && && && &&&/*将byte左移一位,然后与上右移7位后的bi,注意移动之后移掉那位补0。*/
& & & & & & & & byte=(byte&&1)|(bi&&7);& & & & & & & & & & & & & & & & & & & & & & & && &
& & & & & & & & i=4;& & & & & & & & //读取完之后等待48us再接着读取下一个数
& & & & & & & & while(i--);
& & & & }& & & & & & & & & & & & & & & &
/*******************************************************************************
* 函数名& && && &: Ds18b20ChangTemp
* 函数功能& & & & & & & && & : 让18b20开始转换温度
* 输入& && && &&&: com
* 输出& && && && & & &&&: 无
*******************************************************************************/
void&&Ds18b20ChangTemp()
& & & & Ds18b20Init();
& & & & Delay1ms(1);
& & & & Ds18b20WriteByte(0xcc);& & & & & & & & //跳过ROM操作命令& & & & & & & &&&
& & & & Ds18b20WriteByte(0x44);& & & && &&&//温度转换命令
//& & & & Delay1ms(100);& & & & //等待转换成功,而如果你是一直刷着的话,就不用这个延时了
/*******************************************************************************
* 函数名& && && &: Ds18b20ReadTempCom
* 函数功能& & & & & & & && & : 发送读取温度命令
* 输入& && && &&&: com
* 输出& && && && & & &&&: 无
*******************************************************************************/
void&&Ds18b20ReadTempCom()
& & & & Ds18b20Init();
& & & & Delay1ms(1);
& & & & Ds18b20WriteByte(0xcc);& & & &&&//跳过ROM操作命令
& & & & Ds18b20WriteByte(0xbe);& & & &&&//发送读取温度命令
/*******************************************************************************
* 函数名& && && &: Ds18b20ReadTemp
* 函数功能& & & & & & & && & : 读取温度
* 输入& && && &&&: com
* 输出& && && && & & &&&: 无
*******************************************************************************/
int Ds18b20ReadTemp()
& & & & int temp=0;
& & & & unsigned char tmh,
& & & & Ds18b20ChangTemp();& & & & & & & & & & & &&&& & & & //先写入转换命令
& & & & Ds18b20ReadTempCom();& & & & & & & & & & & & //然后等待转换完后发送读取温度命令
& & & & tml=Ds18b20ReadByte();& & & & & & & & //读取温度值共16位,先读低字节
& & & & tmh=Ds18b20ReadByte();& & & & & & & & //再读高字节
& & & & temp=
& & & & temp&&=8;
& & & & temp|=
#ifndef __TEMP_H_#define __TEMP_H_
#include&reg51.h&
sbit DQ=P3^7;
void Delay1ms(unsigned int );unsigned char Ds18b20Init();void Ds18b20WriteCom(unsigned char com);unsigned char Ds18b20ReadByte();void&&Ds18b20ChangTemp();void&&Ds18b20ReadTempCom();int Ds18b20ReadTemp();
真奇怪的提问。。。
编译器又不会帮你检查程序的运行结果,你只要不违反它规定的语法规则,它就会给你通过。
再者,你也没说是怎么个仿真不了。是在电脑上仿真不了,还是下载到芯片仿真不了。
最后,你这个程序贴得让人看着很痛苦,难怪没人回答。
但是,我找到一个有问题的地方,在这里提出来-----------------
& & 在void&&elec(int&&temp)这断代码的倒数7行左右,也就是
& && && &while(temp&-25)
& && && &{
& && && &K=0;
& && && &}
& & 这有可能是个永远跳不出去的死循环,知道吗?一旦你传进来的参数在&&[-24, -15]这个范围内,那你就再也见不到数码管或者LED有什么变化了。
希望这对你有用!!!
如果我没有猜错的话while后面那个return是放在大括号里面的。
if(temp&-30)
& && && &K=1;
& && && &while(temp&-25)
& && && &{
& && && &K=0;
& && && &
& && && &}
& && &&&复制代码
首先你的编译器得支持仿真啊。
采用的是软件仿真还是JLINK仿真? 软件仿真只需要设置时钟主频率就能得到比较正确的结果
仿真不了是说不能硬件仿真嘛,还是你的仿真器的问题,用个例程单独试下查看下
施主,一切都是天意啊~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
& &&&这问题
站长推荐 /5
寻找下一个硬件爆点!高交会|2015中国硬件创新大赛总决赛巅峰对决!顶尖创意硬件项目路演,行业VC大牛精锐点评,最强PK,谁主沉浮?与硬件创新者同行,报名>>
Powered by}

我要回帖

更多关于 为什么要编译 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信