关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 8092|回复: 5
打印 上一主题 下一主题

关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
: }3 j( o, L$ F: n$ b" E2 B* Z5 e  d
& Q3 I! P% B, e6 s    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256. A7 Z" C4 j9 H' p) b
7 c% e9 b7 @6 P  x+ C3 P0 P
其他程序段。。。。。/ k$ I! N) h( s& R( Z9 k0 M

( `2 E6 ^$ e2 v3 D( V9 K   free(x_d);, z9 m3 M9 p5 T, J0 ?
: P& c6 N- [" E4 f
使用DSP侧单独调试功能,验证动态申请没有问题,
' X7 I% M: m3 Y" a* k, z, v( {2 V' l% {+ v, p# L5 {6 h: I
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。' ~9 X1 ?# ]' V( _& i
* }3 t& _* u* W  c

9 _! o9 l6 s! T: `2 \' F5 w, x: Z" J# v+ k
' L2 y. p9 y2 j( e0 s3 Z0 I
! Z3 j# }, T) G$ m

% G' i7 I" z  g: E) E
4 z$ s0 e' R" d0 \( E5 J9 |+ G/ L5 Z$ A
' m# W7 b0 A* x+ N( T& ]
5 q7 T8 T1 |9 `& I! T8 U
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
+ v( q2 a% B2 D4 ^/ n/ k& Q; ]& B我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下' Y6 ]5 }  j( ~  d
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)$ t) T6 C! ^) H" C) [
" e& E0 M/ G( }
是不是需要在DSP.CFG中进行配置
8 Q4 p6 e3 n( S+ [我现在的配置为
, _1 i) o, Z4 Y2 W
7 c2 h% M# L8 [2 @+ W/*
# f5 r2 ~5 @5 ?& H( { *  ======== Operating System Configuration ========" E; ]2 ]) Z- c8 M. p! [* L
*/* |' p0 J3 Q. g1 Y

0 m3 {( b" t: P/ q$ s8 V/* no rts heap */* {9 r4 p" T" o. `
Program.heap = 0;+ X+ u% g8 q" R1 {
Program.argSize = 100;  /* minimum size */
: ]! F! O$ k0 t9 ^% P/ n, S8 ]Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
9 Z6 o+ h) ^3 `- k2 |  f7 w3 B- [- a: m& W, l$ J/ X  p, p
/* create a default heap */* m$ w  s4 p2 K4 z
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
, Q; F8 G  C! {; j, D$ wvar heapMemParams = new HeapMem.Params();/ ~, f( z# o5 O$ d' z) O3 T
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大" ~* G) _4 j% b/ S! n

9 _* c" j3 _. M. u
var Memory = xdc.useModule('xdc.runtime.Memory');  P6 k, e  W+ d' g' v
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);: i" a% y2 P  V8 f; b3 I
; ^0 s3 w) G) z7 Y
/* configure System module */
3 b2 h) T7 `5 c* X3 \: svar SysMin = xdc.useModule('xdc.runtime.SysMin');! d% G3 P2 G# a: z6 S
SysMin.bufSize = 0x1000;
* E5 G  }1 V3 ~! j. \) b% QSysMin.flushAtExit = false;: h" O7 Z: _9 t  g; Q/ g% s

& q9 z/ y0 a; K, nvar System = xdc.useModule('xdc.runtime.System');+ z% p5 M7 D. ?. D) q! g9 \7 f
System.SupportProxy = SysMin;
# _& m; |% B# m" M/ I5 t
5 F/ O  x- U  r+ ?1 S3 m4 |/* configure SysBios to use the lower half of Timer 1 */
/ h6 B/ T) X. k2 M/ ^) _var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
! O! C7 \1 r( b+ o/ R6 R" Ovar Clock = xdc.useModule('ti.sysbios.knl.Clock');& m+ `+ i9 o7 Y3 j
Timer.timerSettings[1].master = true;  T" d$ E" ~3 \2 G, `
Timer.defaultHalf = Timer.Half_LOWER;" T, J9 |8 M* _4 c0 M4 h
Clock.timerId = 1;
7 }. g6 n! a$ x! ~
( i) D, }+ g/ `1 b5 d& d* j) N/ M9 k9 ~0 ^
/*
$ c- L7 R# `$ e) L& j# r *  ======== Miscellaneous Configuration ========4 q: J; P/ f, R( v
*/
+ `  T/ X1 z$ G9 ^( ~/ _! T
2 z" U' Z8 r1 t$ w$ I7 i- w/* set default diags mask */- X/ W* g7 b5 N* P- c; Q
var Diags = xdc.useModule('xdc.runtime.Diags');: {5 I% b+ e% M8 Z# l$ r
var Defaults = xdc.useModule('xdc.runtime.Defaults');- L6 O, F5 T* ?" y2 \, }5 z, A

. n$ O- ~+ X# Q" f2 A/ c' hDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;; y1 [4 |7 u1 _" z) S
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;4 p! Y3 J; A( k! y7 K/ X7 Z
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;* x1 Y8 g* n* p
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */7 G* z- g" ~1 `7 d8 s
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */$ J# @6 {! V4 l6 U, P6 ?
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;' S  `0 }' k) y" a1 [7 Q
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;- E1 W0 A2 e" s0 ]; \, D" _
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;* V6 }0 W4 H9 F8 E  i; G7 D: G
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
0 H' h+ S1 k  a1 E" sDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;5 P$ b) `& y1 [+ {! u
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;* u! }  \; K! }: Y8 W  y  _( k
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;7 k( D  I% b4 S8 P' g% C% p
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;# d# {% s7 ~  L! w
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;7 Z. E/ [$ d, b8 h; B
( d% D6 q: }3 U
/* override diags mask for selected modules */
& D' T" {6 _! [+ O0 @# y3 wxdc.useModule('xdc.runtime.Main');3 s9 {1 I0 m. x2 e: u' y/ [
Diags.setMaskMeta(
% D# F1 K9 ~/ g1 z    "xdc.runtime.Main",
. f- V1 i1 Y& v* h! w    Diags.ENTRY | Diags.EXIT | Diags.INFO,: i& P+ X: n, P& |/ A; C0 ~  w4 G' J: a
    Diags.RUNTIME_ON, r" [/ O' O3 l, m0 I# h* w
);) o8 Y+ i! C: _6 k" W4 b/ Q
8 _4 S4 P: J9 U( n
var Registry = xdc.useModule('xdc.runtime.Registry');$ N% l  z7 I  L/ l2 ^+ n
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
6 m  O0 ^  z9 m/ }- |Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
3 Y+ h! h. k1 r; c* J; D! YRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
/ @5 [$ z" i# B5 V0 f& |+ RRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;- [/ v8 W! B$ |+ y! X
3 Z) d' J7 r% A' w1 t' l
/* create a logger instance */
/ d0 r# [! y. Svar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
2 F. C6 o. c* y! cvar loggerBufP = new LoggerBuf.Params();
+ h7 s9 G* _3 g2 eloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
6 o  H0 o7 H2 a& I0 DloggerBufP.bufType = LoggerBuf.BufType_FIXED;
$ `7 n$ [8 |# {8 [- d! N( p
# C' z; w' U0 Q8 `; e$ ?var appLogger = LoggerBuf.create(loggerBufP);
2 r4 |9 {: }2 B; }, d) dappLogger.instance.name = "AppLog_Core1";
' Y' u/ ~4 G3 e: m& {' cDefaults.common$.logger = appLogger;& v, B% Q- B' Y. ~$ x  j: d
Memory.defaultHeapSize = 0x8192;    " b8 u3 _( R! k/ h" K/ f6 ^
Idle.idleFxns[0] = "&LEDStatus";  i( j; ?+ U+ b' Z: _
Cache.initSize.l2Size = Cache.L2Size_32K;" p7 z, s" A$ S& Y; q% R4 r' b
) R4 U& i* |9 ~0 s
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
1 K4 n' Z) H- a- V1 J4 }* ovar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');1 c9 z" B: b% ]9 m4 Q/ \- k% N
var heapMemParams = new HeapMem.Params();
, }. W' x- W& `+ jheapMemParams.size = 0x4000;
. V6 {  D" N7 b0 G" r0 m  }+ e4 |; U  [: R& l9 P* a
var Memory = xdc.useModule('xdc.runtime.Memory');3 h$ x8 \; I: C$ \2 F
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
0 ~) V; ?& d* o2 L/ P
  i/ M" |3 l$ m8 [! b/ M7 B我大约calloc  每次共计大小为5K*16bits,' n7 a$ D5 Q- R1 a8 o& l# s7 ?7 Y
而默认配置才0x4000、需要改大。7 g4 @% x+ {3 i- [+ ^

, U6 Y9 t: Y- j0 P/ s, g' x
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
$ E$ n, T0 |7 VProgram.heap = 0;
+ A& m; w0 r# i1 n( X; cProgram.argSize = 100;  /* minimum size */
/ g! K8 ^# {" |" b1 s# wProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
6#
发表于 2015-10-31 20:55:50 来自手机 | 只看该作者
这个问题,我再测试一下,过两天实测后给你答复!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

点击跳转“创龙科技服务通”

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2026-3-24 06:06 , Processed in 0.051691 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表