当前位置:  编程技术>综合
本页文章导读:
    ▪cortex m3 LPC1768 sprintf %f 出现崩溃 硬件错误 reset 原因是 arm-gcc 不支持 sprintf %f       我使用的是NXP的cortex-m3芯片LPC1768作为主控芯片,经过研究反复研究和实验,修改startup.s代码中的stack_size和heap_size的大小都无济于事,任然出现奇怪的现象,即在单步调试的时候,只能执行一.........
    ▪内核模块编程---使用内核模块参数(module_param()) (2)      1、使用内核模块参数有两个步骤: (1)、第一步:第一个变量来存储内核模块传过来的参数值 (2)、第二步:声明模块参数module_param(),写在加载函数的前面 2、内核模块参数的作.........
    ▪C++编程调试秘笈----读书笔记(5)      五、带有初始化的基本类型 建议不要使用内置类型,而是使用类 比如: 不要使用int,而是使用Int 不要使用unsigned,该用Unsigned ..... 这样就不会出现所谓的垃圾值 scpp_types.h: #ifndef __SCCP_TY.........

[1]cortex m3 LPC1768 sprintf %f 出现崩溃 硬件错误 reset 原因是 arm-gcc 不支持 sprintf %f
    来源: 互联网  发布时间: 2013-11-10


我使用的是NXP的cortex-m3芯片LPC1768作为主控芯片,经过研究反复研究和实验,修改startup.s代码中的stack_size和heap_size的大小都无济于事,任然出现奇怪的现象,即在单步调试的时候,只能执行一次,并且这次得到的结果是正确的,然后就立即出现硬件错误,进入汇编语言的硬件错误死循环;如果全速运行,那么每次得到的结果都是0.00000,没有一次能得到正确结果,但是并没有死机,感觉应该是该sprintf %f的功能不正确而已,也不至于死机,不过偶尔确实有错误数据返回,但并没有什么规律。

基于此,在网上找了好久,终于弄明白,应该是这类微控制器不支持sprintf %f,因为这个操作太耗时,耗资源,不值得,很多微控制器都无法满足它的要求,故arm-gcc没有提供该支持或者支持得很不好,不过它也给出了凑合的解决办法,比较简单,模拟效果实现的。实现代码参考如下:

When using GCC compiler, due to internal standard C library architecture, it is strongly not recommended to use the "%f" mode in the wm_sprintf function in order to convert a float variable to a string. This leads to an ARM exception (product reset). 

 

float float_num;
uint8_t str_temp[128];
sprintf(str_temp,"%d.%03d",(uint32_t)float_num,(uint32_t)((float_num * 1000) - (uint32_t)(float_num * 1000)));//(实现三位小数转换)


 与大家一起分享!

作者:zqlovlg 发表于2013-1-9 0:15:16 原文链接
阅读:29 评论:0 查看评论

    
[2]内核模块编程---使用内核模块参数(module_param()) (2)
    来源: 互联网  发布时间: 2013-11-10

1、使用内核模块参数有两个步骤:

(1)、第一步:第一个变量来存储内核模块传过来的参数值

(2)、第二步:声明模块参数module_param(),写在加载函数的前面

2、内核模块参数的作用:

控制模块不同的行为(例如控制一个驱动为串口还是并口驱动程序)

3、例子说明:

#include <linux/init.h>                                
#include <linux/module.h>                                

MODULE_LICENSE("GPL"); 
         
static char *name = "David Xie";              
static int age = 30;    

module_param(age, int, S_IRUGO);                                
module_param(name, charp, S_IRUGO);                             
                                
static int hello_init(void)                                
{                                
printk(KERN_EMERG" Name:%s\n",name);                        
printk(KERN_EMERG" Age:%d\n",age);                               
return 0;                                
}                                
static void hello_exit(void)                                
{                                
printk(KERN_INFO" Module Exit\n ");                            
}
                                
module_init(hello_init);                                
module_exit(hello_exit);            

//  insmod param.ko   当不跟参数的时候,Age默认值是30,所以输出30

//  insmod param.ko Age=40  当指定参数为40,Age输出的是指定传过来的参数                                                  

作者:quannii 发表于2013-1-9 0:14:39 原文链接
阅读:28 评论:0 查看评论

    
[3]C++编程调试秘笈----读书笔记(5)
    来源: 互联网  发布时间: 2013-11-10

五、带有初始化的基本类型

建议不要使用内置类型,而是使用类

比如:

不要使用int,而是使用Int

不要使用unsigned,该用Unsigned

.....

这样就不会出现所谓的垃圾值

scpp_types.h:

#ifndef __SCCP_TYPES_H__
#define __SCCP_TYPES_H__

#include <ostream>
#include "scpp_assert.h"

template <typename T>
class TNumber
{
public:
	TNumber(const T& x =0 )
		:data_(x)
	{

	}
	operator T() const 
	{
		return data_;
	}

	TNumber &operator = (const T& x)
	{
		data_ = x;
		return *this;
	}

	TNumber operator ++(int)
	{
		TNumber<T> copy(*this);
		++data_;
		return copy;
	}

	TNumber operator ++()
	{
		++data_;
		return *this;
	}

	TNumber& operator += (T x)
	{
		data_ += x;
		return *this;
	}

	TNumber& operator -= (T x)
	{
		data_ -= x;
		return *this;
	}

	TNumber& operator *= (T x)
	{
		data_ *= x;
		return *this;
	}

	TNumber& operator /= (T x)
	{
		SCPP_ASSERT(x != 0, "Attempt to divide by 0");
		data_ /= x;
		return *this;
	}

	T operator / (T x)
	{
		SCPP_ASSERT(x != 0, "Attempt to divide by 0");
		return data_ / x;
	}

private:
	T data_;
};

typedef long long int64;
typedef unsigned long long unsigned64;

typedef TNumber<int>		Int;
typedef TNumber<unsigned>	Unsigned;
typedef TNumber<int64>		Int64;
typedef TNumber<unsigned64> Unsigned64;
typedef TNumber<float>		Float;
typedef TNumber<double>		Double;
typedef TNumber<char>		Char;

class Bool
{
public:
	Bool(bool x = false)
		:data_(x)
	{
	}

	operator bool () const
	{
		return data_;
	}

	Bool& operator = (bool x)
	{
		data_ = x;
		return *this;
	}

	Bool& operator &= (bool x)
	{
		data_ &= x;
		return *this;
	}

	Bool& operator |= (bool x)
	{
		data_ |= x;
		return *this;
	}

private:
	bool data_;
};

inline std::ostream& operator << (std::ostream& os, Bool b)
{
	if (b)
	{
		os << "True";
	}
	else
	{
		os << "False";
	}
	return os;
}


 

测试代码(vs2012+win7环境):

#include "stdafx.h"
#include "scpp_assert.h"
#include "iostream"
#include "scpp_vector.h"
#include "scpp_array.h"
#include "scpp_matrix.h"
#include "algorithm"
#include "scpp_types.h"

int _tmain(int argc, _TCHAR* argv[])
{
	Int dataInt;
	Double dataDouble1(1.2);
	Double dataDouble2;
	Char c;

	std::cout << dataInt << std::endl;
	std::cout << dataDouble1 << std::endl;
	std::cout << dataDouble2 << std::endl;
	std::cout << dataInt++ << std::endl;
	std::cout << ++dataInt << std::endl;
	std::cout << c << std::endl;

	c = 'x';
	std::cout << c << std::endl;
	
//	dataDouble1 /= dataDouble2;
	dataDouble1  = dataDouble1 / dataDouble2;

	return 0;
}


 

作者:zengraoli 发表于2013-1-9 0:14:36 原文链接
阅读:26 评论:0 查看评论

    
最新技术文章:
▪error while loading shared libraries的解決方法    ▪版本控制的极佳实践    ▪安装多个jdk,多个tomcat版本的冲突问题
▪简单选择排序算法    ▪国外 Android资源大集合 和个人学习android收藏    ▪.NET MVC 给loading数据加 ajax 等待loading效果
▪http代理工作原理(3)    ▪关注细节-TWaver Android    ▪Spring怎样把Bean实例暴露出来?
▪java写入excel2007的操作    ▪http代理工作原理(1)    ▪浅谈三层架构
▪http代理工作原理(2)    ▪解析三层架构……如何分层?    ▪linux PS命令
▪secureMRT Linux命令汉字出现乱码    ▪把C++类成员方法直接作为线程回调函数    ▪weak-and算法原理演示(wand)
▪53个要点提高PHP编程效率    ▪linux僵尸进程    ▪java 序列化到mysql数据库中
▪利用ndk编译ffmpeg    ▪活用CSS巧妙解决超长文本内容显示问题    ▪通过DBMS_RANDOM得到随机
▪CodeSmith 使用教程(8): CodeTemplate对象    ▪android4.0 进程回收机制    ▪仿天猫首页-产品分类
▪从Samples中入门IOS开发(四)------ 基于socket的...    ▪工作趣事 之 重装服务器后的网站不能正常访...    ▪java序列化学习笔记
▪Office 2010下VBA Addressof的应用    ▪一起来学ASP.NET Ajax(二)之初识ASP.NET Ajax    ▪更改CentOS yum 源为163的源
▪ORACLE 常用表达式    ▪记录一下,AS3反射功能的实现方法    ▪u盘文件系统问题
▪java设计模式-观察者模式初探    ▪MANIFEST.MF格式总结    ▪Android 4.2 Wifi Display核心分析 (一)
▪Perl 正则表达式 记忆方法    ▪.NET MVC 给loading数据加 ajax 等待laoding效果    ▪java 类之访问权限
▪extjs在myeclipse提示    ▪xml不提示问题    ▪Android应用程序运行的性能设计
▪sharepoint 2010 自定义列表启用版本记录控制 如...    ▪解决UIScrollView截获touch事件的一个极其简单有...    ▪Chain of Responsibility -- 责任链模式
▪运行skyeye缺少libbfd-2.18.50.0.2.20071001.so问题    ▪sharepoint 2010 使用sharepoint脚本STSNavigate方法实...    ▪让javascript显原型!
▪kohana基本安装配置    ▪MVVM开发模式实例解析    ▪sharepoint 2010 设置pdf文件在浏览器中访问
▪spring+hibernate+事务    ▪MyEclipse中文乱码,编码格式设置,文件编码格...    ▪struts+spring+hibernate用jquery实现数据分页异步加...
▪windows平台c++开发"麻烦"总结    ▪Android Wifi几点    ▪Myeclipse中JDBC连接池的配置
▪优化后的冒泡排序算法    ▪elasticsearch RESTful搜索引擎-(java jest 使用[入门])...    ▪MyEclipse下安装SVN插件SubEclipse的方法
▪100个windows平台C++开发错误之七编程    ▪串口转以太网模块WIZ140SR/WIZ145SR 数据手册(版...    ▪初识XML(三)Schema
▪Deep Copy VS Shallow Copy    ▪iphone游戏开发之cocos2d (七) 自定义精灵类,实...    ▪100个windows平台C++开发错误之八编程
▪C++程序的内存布局    ▪将不确定变为确定系列~Linq的批量操作靠的住...    ▪DIV始终保持在浏览器中央,兼容各浏览器版本
▪Activity生命周期管理之三——Stopping或者Restarti...    ▪《C语言参悟之旅》-读书笔记(八)    ▪C++函数参数小结
▪android Content Provider详解九    ▪简单的图片无缝滚动效果    ▪required artifact is missing.
▪c++编程风格----读书笔记(1)    ▪codeforces round 160    ▪【Visual C++】游戏开发笔记四十 浅墨DirectX教程...
▪【D3D11游戏编程】学习笔记十八:模板缓冲区...    ▪codeforces 70D 动态凸包    ▪c++编程风格----读书笔记(2)
▪Android窗口管理服务WindowManagerService计算Activity...    ▪keytool 错误: java.io.FileNotFoundException: MyAndroidKey....    ▪《HTTP权威指南》读书笔记---缓存
▪markdown    ▪[设计模式]总结    ▪网站用户行为分析在用户市场领域的应用
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3