二、在.net micro framework中增加LibTom加解密算法

87 篇文章 1 订阅
11 篇文章 0 订阅

把LibTom加入到工程后,可以顺利编译通过.通过USB下载到板子上面,开心地调用RSA算法,发现有去无回.

.net micro framework调试c/cpp代码是非常不方便的,还好牛人已经给我探索出了方法.

MDK结合JLINK在调试C/CPP Native工程


用这个调试,发现,libTom使用calloc或者malloc动态分配空间时候,竟然把BUFFER分配到Flash的地址上.....Oh My God....

在群上问了一些人,但是没有任何回复.在Netduion的论坛上面,搜索到一些相关信息.表示不建议使用动态内存.

原文章:http://forums.netduino.com/index.php?/topic/11718-garbage-collector-sd-card-stream-writer-ram/?hl=malloc#entry62045

(To pre-allocate memory for a managed function, just allocate it at the class level. We do this a lot in our driver code. Then use that pre-allocated memory in your function. No dynamic memory allocation or GC required.)

好吧,竟然不行,就重新搞内存管理吧.但只能说理想很美好,现实很骨感.

让我们打一架吧!!!还是失败了.

找呀找呀,怎么在底层使用动态内存呢~~!!竟然发现有tinyhal.h文件中有如下代码:

extern "C" {

void* private_malloc ( size_t len             );
void  private_free   ( void*  ptr             );
void* private_realloc( void*  ptr, size_t len );

}

好吧,用他来重定义这两个函数试试.新建一个MEN.C

贴上我的代码

#include <string.h>

typedef unsigned char      BYTE;
typedef unsigned char*     PBYTE;

typedef unsigned char      UINT8;
typedef signed   char      INT8;

typedef unsigned short int UINT16;
typedef signed   short int INT16;

typedef unsigned int       UINT32;
typedef signed   int       INT32;

typedef unsigned __int64   UINT64;
typedef signed   __int64   INT64;

typedef unsigned int       size_t;

extern  void* private_malloc ( size_t len             );
extern  void  private_free   ( void*  ptr             );
extern  void* private_realloc( void*  ptr, size_t len );



void *memset(void *s, int c, size_t count)
{
	char *xs = s;
	while (count--)
		*xs++ = c;
	return s;
}

void free(void *ptr)
{
	private_free(ptr);
}

void * malloc(UINT32 size)
{
	return private_malloc(size);
}

void *calloc(size_t n, size_t size)
{
	PBYTE lp = private_malloc(n*size);
	if(lp)
	{
		memset(lp,0,n*size);
	}
	return lp;
}

void *realloc(void *ptr,UINT32 size)
{
	return private_realloc(ptr,size);		
}

见证奇迹的时候......

好吧,你已经成功了....




来自:http://blog.csdn.net/lan120576664

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值