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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
: e* r5 a3 i' S5 K% ?$ T1 N
4 J! O( A" W  F. P    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
3 v8 p/ c  j$ G% n6 ]/ e& Q" `& C: q2 L4 j  N, L9 A
其他程序段。。。。。& j$ A  p7 n/ P' N: r/ L% {
4 ?! f6 ^, ]2 v+ I6 K8 f
   free(x_d);
0 G9 t, l2 w# N! H9 U. |& C' O# }) V" N
使用DSP侧单独调试功能,验证动态申请没有问题,
' z! ?8 C. v' h  a; D2 h) y) U) R6 C  f( q" `9 z! b$ Z2 G
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。( }4 b* J( q+ A0 Q6 B. F
# \$ x$ e* g% z" ^% p- `7 y
/ M: t: T4 x6 H0 h1 i

# y* v, d8 O( Y; m
9 x# k$ F' K2 ~$ |$ D- r" |/ k$ t5 ]
2 \2 k9 E! |* U8 [. ]
+ w, R( j5 D. B7 o) x3 S- {/ p' B
' M0 d* F. F5 o) Q7 ^, k) F' S

9 q. T" Y% g" Z+ G
: d6 @8 J4 U1 q3 I4 f; L
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */% E+ j% @8 S4 \, j! K' C, O
Program.heap = 0;9 G6 z; ~* l3 n1 \& X& [
Program.argSize = 100;  /* minimum size */
! {# D3 H% l) }, b& l  [/ UProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
8 E( B$ r. i% p) c- n7 T) _var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
; T1 [2 ?2 t: B& g! ivar heapMemParams = new HeapMem.Params();' |8 e2 w5 @& U; ^6 J
heapMemParams.size = 0x4000;
% y. ]" Q& R/ o$ q
3 U$ A4 h3 J6 A9 M/ [var Memory = xdc.useModule('xdc.runtime.Memory');
0 C3 T- j5 I+ m& n4 eMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
% u# ^0 t) T  a% B9 q
6 m% F. r6 s! t% S; C) Z/ P我大约calloc  每次共计大小为5K*16bits,
) u* K1 ?' W" b而默认配置才0x4000、需要改大。$ B9 {: R3 n# M& O$ W' C9 E

: @& Q3 R* ^8 y
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
- W; V, m: ?. b8 X  O2 g( M* x5 z我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
5 [8 a, l" T9 G+ a. c(不过疑惑的是,为何单独DSP仿真就没有问题呢?). p3 X4 n" e7 G* _5 G2 ~
6 d9 S8 I. @" _7 n
是不是需要在DSP.CFG中进行配置" H* Y2 N1 e, [8 C- P
我现在的配置为
) F, S4 b& |3 C! p3 W
! w% m( H" |7 X  W  q4 b: o' j/*
) l9 D1 ?/ e/ W' J" C; P" K% t/ u *  ======== Operating System Configuration ========
" k) \+ R4 h/ E */# P. M" S6 ], B; q; `
0 k6 P8 ~- T6 y6 B
/* no rts heap */. b' }1 m+ F4 \3 K% z. c; p
Program.heap = 0;
; k( P+ P) q2 H0 }  ], vProgram.argSize = 100;  /* minimum size */" g& v( M6 X6 ^/ S
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大3 Z8 z" L7 z4 c% m
  i: ^. y4 G1 x
/* create a default heap */: Q6 t2 W( Q6 i: h& K7 Q
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');" k* o- I7 t8 L, g1 N+ O$ V
var heapMemParams = new HeapMem.Params();
: V8 U* \# O8 g2 k# g2 {8 cheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大: @% H5 E7 Z" `
3 c; V5 Q. ]7 P. Y, t
var Memory = xdc.useModule('xdc.runtime.Memory');
3 g" w; `/ M* Y. D! fMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
/ y; r3 n; v- |+ G8 `: b) Z: v4 A: _7 Z1 a. y. X; g
/* configure System module */5 L% p  _2 y5 v, b- ?$ u* z
var SysMin = xdc.useModule('xdc.runtime.SysMin');
7 ~7 G) _! G/ S. g( z! kSysMin.bufSize = 0x1000;) }- F4 |& u# r0 s: N6 w
SysMin.flushAtExit = false;
# u; M/ V1 |! M+ b
( d& z. r: J, i' h$ i" R  Fvar System = xdc.useModule('xdc.runtime.System');
, E7 O2 `7 w% D/ @System.SupportProxy = SysMin;& h; T) _6 R) n  a
# Y9 @8 F# W  R; ~
/* configure SysBios to use the lower half of Timer 1 */( z/ F5 F) ?  D' R2 W2 y
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');0 S5 z$ `) V' C) f- h' Y9 V( J
var Clock = xdc.useModule('ti.sysbios.knl.Clock');  u8 f+ ]0 W) L; T9 H5 x# ^3 k( n* E
Timer.timerSettings[1].master = true;
5 C! K9 i; ?8 J" L. c+ [1 NTimer.defaultHalf = Timer.Half_LOWER;- i2 n) g4 a* S" U) d' E
Clock.timerId = 1;
4 j" t8 s- e* J8 g9 |
" L; x: V8 L7 b! m$ W& V8 [) X0 T- P, {( p' w9 N
/*
, w1 A/ @, I2 i7 h7 b2 @% z# [ *  ======== Miscellaneous Configuration ========9 \3 y- n: s9 Q- _0 b5 V" a
*/; j4 [% i) `& N1 {7 o. s

- o- Z1 s! @+ |! x3 i/* set default diags mask */3 M) g. [4 ?0 a  f+ \
var Diags = xdc.useModule('xdc.runtime.Diags');* p8 |4 c1 d; Y  e& c$ U5 g0 U
var Defaults = xdc.useModule('xdc.runtime.Defaults');& r# F: K$ \$ f& Q
* S9 {8 D2 D' X2 o& w4 F8 N
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
0 s7 g  ?2 N9 J! o0 S' D! P& h/ vDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;9 J+ h! Y8 }( c4 d# |1 }( H
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;8 [5 ?4 d% {4 Y0 r8 D
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
* F2 E1 s" _* M8 X5 n, S% ?, J5 _. E$ HDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */7 C. G& F. c# u* R) Z
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;* J7 E$ G' l2 v8 r+ Y+ f
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
( T. m6 T6 b. J5 v/ |+ ^$ D4 |Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;/ r3 Q7 o, \* f3 H
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
& [" M" f5 G5 n1 x% |4 pDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;; D3 P3 f* ]3 _6 i
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;% }1 z2 x4 Y6 X5 `: z3 G) H" o* m
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;& X2 ~" F! S* \" i- {' [, U+ z
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
8 e( S# a' n% r: lDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;5 p1 D& S& R) n2 c% v4 o
" O7 q' Z7 ^: Q/ A1 ?
/* override diags mask for selected modules */  X$ E# a3 |4 w2 r
xdc.useModule('xdc.runtime.Main');. u6 C4 _" _: e: x+ F: I: @
Diags.setMaskMeta(' f: ~  g# `$ f
    "xdc.runtime.Main",& T9 x/ s4 E7 U' S% P- |
    Diags.ENTRY | Diags.EXIT | Diags.INFO,8 z$ s: Y3 X5 F4 Y
    Diags.RUNTIME_ON) d6 Q% N  f2 ?; Y! F- h  `- J7 o- Y
);
2 [8 |4 R8 T5 H& S3 I! g; c+ J6 d9 y$ U; F- P, h
var Registry = xdc.useModule('xdc.runtime.Registry');- C; i! A4 I0 y" u; N# V6 F* x+ ^
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;6 R9 ~6 d. m6 D5 Q/ O
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;: c( K& f1 z( ~  c& h
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;* z( E2 w0 |8 c8 d, ?6 }- y" H8 I
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
! D+ ^4 f# t  v! {( @
% W+ F* g" H0 r! j: J+ N( A/* create a logger instance */( @3 o5 Z7 a5 K+ Z
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');" V( t( D5 D4 V; W$ J7 ?0 L
var loggerBufP = new LoggerBuf.Params();
6 q: K: w* o4 \loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
- r7 X. |1 z" V9 xloggerBufP.bufType = LoggerBuf.BufType_FIXED;; p; C! g& I0 g, I- K( U9 p- T, l

3 [# C1 _2 u3 D4 qvar appLogger = LoggerBuf.create(loggerBufP);6 }3 ]8 X9 o  S, h- U6 c- g% d9 E
appLogger.instance.name = "AppLog_Core1";* N9 b$ b/ @5 k1 P* x$ m
Defaults.common$.logger = appLogger;
3 B! A' ?3 v. }1 JMemory.defaultHeapSize = 0x8192;   
( w6 a4 z: R; M1 O9 g4 z3 G) B, x2 H) UIdle.idleFxns[0] = "&LEDStatus";
; v( {5 c6 |# m. KCache.initSize.l2Size = Cache.L2Size_32K;& G$ C3 v2 C& l  @8 |
! x7 I' H2 ]" ^% j! v+ `: [
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-4-5 23:26 , Processed in 0.041540 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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