A. win7系统,一开始系统文件夹里没有coredll.dll,大家都没有吗 在vs2010中
DLL文件是系统的动态链接库文件,你可以按照一下步骤修复1从网上下载这个DLL文件,下载的时候注意去大站下载,以确保安全,将其放到SYSTEM32目录下面2点击开始……运行……CMD,确定,打开命令提示符界面,输入regsvr32*.dll注册该DLL3如果需要注册的DLL较多的话,可以在开始->运行(win+r)下输入命令cmd/cfor%iin(%windir%\system32\*.dll)doregsvr32.exe/s%icmd/cfor%iin(%windir%\system32\*.ocx)doregsvr32.exe/s%i来注册所有的DLL4,以上命令需要手打,如果对于CMD的批处理命令不甚熟悉的话,你也可以使用腾讯电脑管家的电脑诊所进行修复,它的修复方案是图形界面的,非常简单,而且涵盖了大部分的系统常见问题,点下鼠标就可以全自动的修复
B. 为什么没有产生core 文件
在linux上只要打开core mp文件开关,当程序crash时系统生成相应的core文件。下面是简单的一些步骤:查看当前是否已经打开了此开关通过命令:ulimit -c 如果输出为 0 ,则代表没有打开。如果为unlimited则已经打开了,就没必要在做打开。2.通过命令打开ulimit -c unlimited .然后通过步骤1,可以监测是否打开成功。3.如果你要取消,很简单:ulimit -c 0 就可以了通过上面的命令修改后,一般都只是对当前会话起作用,当你下次重新登录后,还是要重新输入上面的命令,所以很麻烦。我们可以把通过修改 /etc/profile文件 来使系统每次自动打开。步骤如下:首先打开/etc/profile文件一般都可以在文件中找到 这句语句:ulimit -S -c 0 > /dev/null 2>&1.ok,根据上面的例子,我们只要把那个0 改为 unlimited 就ok了。然后保存退出。2.通过source /etc/profile 使当期设置生效。3.通过ulimit -c 查看下是否已经打开。其实不光这个命令可以加入到/etc/profile文件中,一些其他我们需要每次登录都生效的都可以加入到此文件中,因为登录时linux都会加载此文件。比如一些环境变量的设置。还有一种方法可以通过修改/etc/security/limits.conf文件来设置,这个方法没有试过,也是网上看到。不过上面两种就可以了!最后说一下生成core mp文件的位置,默认位置与可执行程序在同一目录下,文件名是core.***,其中***是一个数字。core mp文件名的模式保存在/proc/sys/kernel/core_pattern中,缺省值是core。通过以下命令可以更改core mp文件的位置(如希望生成到/tmp/cores目录下)echo “/tmp/cores/core” > /proc/sys/kernel/core_pattern设置完以后我们可以做个测试,写个程序,产生一个异常。然后看到当前目录会有个core*的文件。
C. 计算机中什么叫找不到core目录
安装好以后再复制的?当然不行了,你得复制安装源文件,重新在同学电脑上装一下。你虽然把文件夹复制过去了,但是很多注册表的内容,一些加载在C盘系统目录的文件你是没有复制过去的。
D. stm32 f4 fpu与cpu可以同时工作吗
能。现在又FPU或者硬件浮点运算能力的主要有高端DSP(比如TI F28335/C6000/DM6XX/OMAP等),通用CPU(X87数学协处理器)和高级的ARM+DSP处理器等。 STM32-F4属于Cortex-M4F构架,这和M0、M3的最大不同就是多了一个F-float,即支持浮点指令集,因此在处理数学运算时能比M0/M3高出数十倍甚至上百倍的性能,但是要充分发挥FPU的数学性能,还需要一些小小的设置: 1.编译控制选项:虽然STM32F4XX固件库的例程之system_stm32f4XXX.c文件中添加了对应的代码,但给用户评估使用的STM32F4-Discovery例程中却没有,因此MDK4.23编写浮点运算程序时,虽然编译器正确产生了V指令来进行浮点运算,但是因为system_stm32f4XXX.c文件没有启用FPU,因此CPU执行时只认为是遇到非法指令而跳转到HardFault_Handler()中断中原地踏步。因此要保证这个错误不发生,必须要在system_init()函数里面添加如下代码: #if (__FPU_PRESENT == 1) && (__FPU_USED == 1) SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2)); #endif 因为这个选项是有条件编译控制的,因此需要在工程选项(Project->Options for target "XXXX")中的C/C++选项卡的Define中加入如下的语句:__FPU_PRESENT=1,__FPU_USED =1。这样编译时就加入了启动FPU的代码,CPU也就能正确高效的使用FPU进行简单的加减乘除了。 但这还远远不够。对于复杂运算,比如三角函数,开方等运算,如果编程时还是使用math.h头文件,那是没法提升效率的:因为math.h头文件是针对所有ARM处理器的,其运算函数都是基于定点CPU和标准算法(IEEE-754),并没有预见使用FPU的情况,需要很多指令和复杂的过程才能完成运算,也就增加了运算时间。因此要充分发挥M4F的浮点功能,就需要使用固件库自带的arm_math.h,这个文件根据编译控制项(__FPU_USED == 1)来决定是使用那一种函数方法:如果没有使用FPU,那就调用keil的标准math.h头文件中定义的函数;如果使用了FPU,那就是用固件库自带的优化函数来解决问题。 在arm_math的开头部分是有这些编译控制信息: #ifndef _ARM_MATH_H #define _ARM_MATH_H #define __CMSIS_GENERIC #if defined (ARM_MATH_CM4) #include "core_cm4.h" #elif defined (ARM_MATH_CM3) #include "core_cm3.h" #elif defined (ARM_MATH_CM0) #include "core_cm0.h" #else #include "ARMCM4.h" #warning "Define either ARM_MATH_CM4 OR ARM_MATH_CM3…By Default building on ARM_MATH_CM4….." #endif #undef __CMSIS_GENERIC #include "string.h" #include "math.h" 就是说如果不使用CMSIS的,就会调用keil自带的标准库函数。否则就用CMSIS的定义。这里因为是用的STM32F4,所以应该要ARM_MATH_CM4控制,即加入core_cm4.h,否则就用使用ARMCM4.h——但在编译时keil会提示找不到这文件。因此需要在工程选项之C/C++选项卡的define中继续加入语句ARM_MATH_CM4。 加入上述编译控制项之后,高级数学函数的使用基本没问题了,比如正余弦三角函数的计算。但需要注意,如果你直接使用sin()、cos()、sqrt()这样的函数,那结果还算调用keil的math.h,你可以在debug时看对应的代码,其汇编指令为BL.W __hardfp_xxx。因此这时要完成三角函数的计算就要使用arm_sin_f32()或者arm_cos_f32(),用法不变,这两个函数的原型分别在arm_sin_f32.c和arm_cos_f32.c中。通过对256点三角函数表的查询和插值算法得到任意角度的精确函数值,这就比“原装”的sin()、cos()快多了。 当然有些例外的是开发函数sqrt(),在arm_math.h中是这么定义的: static __INLINE arm_status arm_sqrt_f32(float32_t in, float32_t *pOut) { if(in > 0) { // #if __FPU_USED #if (__FPU_USED == 1) && defined ( __CC_ARM ) *pOut = __sqrtf(in); #else *pOut = sqrtf(in); #endif return (ARM_MATH_SUCCESS); } else { *pOut = 0.0f; return (ARM_MATH_ARGUMENT_ERROR); } } 即开方用的函数是arm_sqrt_f32(),其中首先判断被开发的书是否大于0,只有大于0的才能进行运算,否则输出结果为0并返回“错误”标志。如果大于0,并且实用了FPU和__CC_ARM控制项,那调用__sqrtf()来完成编译,否则调用sqrtf()——这个sqrtf()是能在keil的math.h中找到的,即调用子函数来完成运算,而__sqrtf()呢?新出现的,相信大家都能猜到是什么玩意儿:对,就是VSQRT指令!因此要把这点性能也要发挥出来,就需要工程选项之C/C++选项卡的define中继续加入语句__CC_ARM才行。大家可以比较一下是否加入__CC_ARM编译后会汇编代码的差别巨大差别。 当然,对于arm_sqrt_f32()函数还是有些麻烦,如果你确认被开方的书是大于等于0的,那就直接使用__sqrtf()函数完成运算,即一条简单的VSQRT指令。 STM32F4固件库还提供了其他很有用的数学函数,都位于DSP_Lib文件夹,请大家慢慢探索,Discovery!
E. core_cm3.c这个文件在stm32开发中有什么用的
这个文件提供了一些汇编级函数实现,例如提供了中断屏蔽的汇编实现,因为你没使用这些函数所以删除它不会影响编译,例如你要做软复位函数时,你就会使用中断屏蔽在那个时候你删除它就会编译失败。 望采纳谢谢
F. 怎么解决MDK的出错问题
新手开始学习STM32,一般是看资料,看视频,学习别人的例程,然后模仿,然后理解,最后自己写这一系列过程。我也不例外。视频多了,各有各自的特点。我学习的例程是论坛里的深入浅出STM32-NUCLEO-072RB开发板视频教程资料(PPT+图片+MDK源码)原帖地址http://www.stmcu.org/mole/forum/forum.php?mod=viewthread&tid=597508&extra=page%3D1%26filter%3Ddigest%26digest%3D1从第一个例程1-LED(软件延时).rar开始学习,下载编译,出现许多错误,我用的是MDK5.13.1…\stm32f072rbt6\core_cm0.h(127): error: #5: cannot open source input file "core_cmInstr.h": No such file or directory #include <core_cmInstr.h> /* Core Instruction Access */错误提示:不能打开"core_cmInstr.h",下面一行有个头文件,这个错误是缺少头文件。在标准外设库里找到这个文件,添加到MDK源码下的stm32f072rbt6文件夹下,再次编译,又出现..\stm32f072rbt6\core_cm0.h(128): error: #5: cannot open source input file "core_cmFunc.h": No such file or directory #include <core_cmFunc.h> /* Core Function Access */是 不是和上面一个错误相似呢,解决如上,添加头文件后再次编译后Program Size: Code=2184 RO-data=224 RW-data=36 ZI-data=1028 FromELF: creating hex file…".\LED.axf" – 0 Error(s), 0 Warning(s).OK,0错误,0警告,下载到072板上就看到实验现象了。2. UART(printf+查询方式接收).rarProgram Size: Code=4640 RO-data=224 RW-data=44 ZI-data=1028 FromELF: creating hex file…".\LED.axf" – 0 Error(s), 0 Warning(s).0错误,0警告啊。可是程序里有2个X: 2.JPG (26.66 KB, 下载次数: 0)下载附件2015-2-16 13:19 上传虽然程序可以运行,但是追求完美的我,眼里不容X,用鼠标点它,提示:error:declaration conflicts with target of using of declaration already in scope大概意思是 声明冲突了,可我检查了,没发现那里错误啊 ,这个问题困扰了好几天,等到学到ADC的时候,才找到原因因为里面的源文件和头文件用的都是.C和.H 改正过来后,OK了。这些例程真的很不错模块化结构。
G. keil编译时报错:error: L6002U: Could not open file .\***\core_cm3.o
1、首先第一步,找到从网上下载好keil解压后,所有的一个文件夹。
H. 为什么程序崩溃了,没有产生core文件
一、要保证存放Core mp的目录存在且进程对该目录有写权限。存放Core mp的目录即进程的当前目录,一般就是当初发出命令启动该进程时所在的目录。但如果是通过脚本启动,则脚本可能会修改当前目录,这时进程真正的当前目录就会与当初执行脚本所在目录不同。这时可以查看"/proc/<进程pid>/cwd"符号链接的目标来确定进程真正的当前目录地址。通过系统服务启动的进程也可通过这一方法查看。 二、若程序调用了seteuid()/setegid()改变了进程的有效用户或组,则在默认情况下系统不会为这些进程生成Core mp。很多服务程序都会调用seteuid(),如MySQL,不论你用什么用户运行mysqld_safe启动MySQL,mysqld进行的有效用户始终是msyql用户。如果你当初是以用户A运行了某个程序,但在ps里看到的这个程序的用户却是B的话,那么这些进程就是调用了seteuid了。为了能够让这些进程生成Coremp,需要(echo "1" > /proc/sys/kernel/suid_mpable)。 三、这个一般都知道,就是要设置足够大的Core文件大小限制了。程序崩溃时生成的Core文件大小即为程序运行时占用的内存大小。但程序崩溃时的行为不可按平常时的行为来估计,比如缓冲区溢出等错误可能导致堆栈被破坏,因此经常会出现某个变量的值被修改成乱七八糟的,然后程序用这个大小去申请内存就可能导致程序比平常时多占用很多内存。因此无论程序正常运行时占用的内存多么少,要保证生成Core文件还是将大小限制设为unlimited为好。4四、在/etc/profile中添加:ulimit -c unlimited > /dev/null 2?&1 五、一般在 CLI 上启动的程序,如果设置:ulimit -c unlimited就可以在程序以外终止时生成 core mp 文件。但是对于 daemon 方式运行的程序,其与 CLI 启动的程序的主要区别是进程的运行环境,其中就包括cwd(current working directory)。如果以相对路径方式定义 core 文件的格式,比如定义 /proc/sys/kernel/core_pattern 为:core-%e-%p-%t则一般来说,daemon 文件的 cwd 就是/,你可以通过/proc/<your_program_pid>/cwd来查看,一般都是连接到/目录。而如果用户对这个目录没有写权限,那么就不会生成 core mp 文件了。最直接的解决的方法,是修改/proc/sys/kernel/core_pattern为绝对路径:/data/coremp/core-%e-%p-%t并且保证这样就基本 OK 了。修改/proc/sys/kernel/core_pattern文件中的 core mp 文件格式为绝对路径,比如:/data/coremp/core-%e-%p-%t
I. stm32f407如何写用keil程序,我看到的都是32f10的都找不大core_cm3.c求图解
core_cm3.c
这个文件很多,我都直接删了,不用它