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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
3 x+ f( m# T; q2 m  P$ g, \
3 N3 T1 @& V& b/ u$ f% S2 J4 {% C, g    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256( R8 k; V3 c! Z& S) @1 m, `- d! d

: \. M3 _) _+ |) N4 N其他程序段。。。。。: }' O8 [2 b; v& j: ~" `
% @; |. {" q( L" i% }9 z
   free(x_d);
( T, \3 u# m0 l9 Y( J4 v* G8 O+ h# A1 F1 @6 |, R9 d3 F
使用DSP侧单独调试功能,验证动态申请没有问题,
  \0 [, f( o( [& Z% H. v* z+ {' y2 Q" m/ O) l
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
' L5 d( d% R3 n
1 l6 k+ X/ H' T% A; ?5 t
* a$ Z$ x& ~0 X" w6 M+ `0 G" i

- E; v. K- Y  }! G6 A/ g. X/ X! @, e# H
; U* n6 T% {0 M8 Z, s
; h( }! ?5 P* w7 c

1 w& Q, Q/ P- Y; M! J% g) F2 ]3 [  J7 ]3 z" V+ V: S
+ l2 }, w5 ]* H) s, m

) ~' X! e8 W' t& ^9 `
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明- d! L# E2 {' e/ a- y' |. I% h
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
- F, C9 l& O9 ^* c/ _5 B(不过疑惑的是,为何单独DSP仿真就没有问题呢?)& E; s7 }2 ]% x2 ~

. R& @) Z( ]& P! Z, X0 @是不是需要在DSP.CFG中进行配置
# C5 a5 W, R6 R3 P! `& n1 t  E我现在的配置为
2 T* n; I" r9 _4 |' X+ S+ E0 t+ {2 k/ e$ o/ ?; D& s- g3 E
/*
' B. L1 L1 {9 @& X0 R5 H* ~4 ?: r *  ======== Operating System Configuration ========
1 W1 e+ p; J3 L- {  G- i  _0 {$ { */
* J- z3 N( d: J* G8 w: P4 k, U% c, j( ?8 T1 P& t
/* no rts heap */, @6 n- ~( Y9 _( W( G9 U6 @7 y
Program.heap = 0;
. Q5 l0 S8 B; ^8 h# \Program.argSize = 100;  /* minimum size */
, k& k8 M: W9 |: X, R. l& D: }Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
4 x% `8 p* g8 P0 y. {9 K+ ?' P8 o+ r) q! L5 Q+ Z
/* create a default heap */" i  ^# E* z" L, ^
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
3 r* {! K* ^( v( e5 }$ dvar heapMemParams = new HeapMem.Params();
* O  w  n; k7 P0 W! q- e3 c. kheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
' i! i& w2 t0 L* l* c* U; M7 |) t4 H0 H
var Memory = xdc.useModule('xdc.runtime.Memory');
0 _3 u+ P6 q1 t0 }8 f: n2 P9 w8 MMemory.defaultHeapInstance = HeapMem.create(heapMemParams);' @3 N6 _6 W+ b2 n, D; J  `  ?

. a+ t! p4 K1 e/ P. x" x/* configure System module */
- X) j& m% G# r* q% y0 Bvar SysMin = xdc.useModule('xdc.runtime.SysMin');6 Q" l3 l; R8 H$ R
SysMin.bufSize = 0x1000;& A- p- M* Q6 V5 u9 b2 r2 o. a
SysMin.flushAtExit = false;
0 n5 B" S" o0 z/ k; t4 q# U3 _) E7 {5 q! J* W8 y) |1 V, N
var System = xdc.useModule('xdc.runtime.System');( C+ C1 B* c, t
System.SupportProxy = SysMin;
( D5 f: b# j$ w* T" B" o9 v! w9 {3 \( o
/* configure SysBios to use the lower half of Timer 1 */
+ p- f  c0 R; q8 K, C, ]0 {7 Cvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');" c/ U$ M' g5 h% T5 Z; N+ w/ v5 h9 B
var Clock = xdc.useModule('ti.sysbios.knl.Clock');+ [9 R8 k9 v8 G) T% u
Timer.timerSettings[1].master = true;1 z3 y" Z8 R: S( E5 ^4 Q9 U, v$ v* t' V
Timer.defaultHalf = Timer.Half_LOWER;. W, D4 ~+ Q; s: [! n
Clock.timerId = 1;
1 S8 {/ \; Z# m7 _- Z+ H. a! e8 `7 E& ]. _1 A/ b; q' l
3 c3 L; B! n/ P! a2 o" G
/*9 u. I* `& ?4 _  w
*  ======== Miscellaneous Configuration ========
- c5 e3 ?2 K) j0 b" s, P% y' X0 t */
5 |' N* w  \: x5 J4 Y
) p5 S3 C+ j! o0 q9 g# v+ Y1 b/* set default diags mask */' T' J3 U+ O5 |: G  V* b$ {0 G
var Diags = xdc.useModule('xdc.runtime.Diags');
- \5 m4 K! }/ {5 A( @var Defaults = xdc.useModule('xdc.runtime.Defaults');1 R0 G  n) a7 G9 O; W0 P, @& J

# z. M; V. Z# ^! }" D1 NDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
1 M5 Y# C) l3 z; u  Z  ]Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;( n$ G+ q  L' X1 c+ o: H5 D
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
& O' q8 C+ d% o+ rDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */, H' ~' g* b! I1 ?! P
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
4 @$ j- L6 x: A1 M" J$ s1 BDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
  c3 b5 c% Y  v+ ]4 {. w1 BDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
0 N" m& w' V: Y8 ~& [. y( PDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
( r/ T/ E3 H1 ]( LDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;& ~* w- N4 u4 a7 D* r( b/ {
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;# Q2 {: B+ ?$ h
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
0 m% V# h, C) x  CDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
$ q5 a) P5 K1 {% eDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
5 X/ N: l) t& [0 {* a; t' b) G3 TDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
+ N8 C& z) D! V/ e3 ^" i& H4 z9 q% m/ O* e. q) R7 x7 @
/* override diags mask for selected modules */( T0 b/ C, H% b% l2 F$ R
xdc.useModule('xdc.runtime.Main');! A+ y( r0 R; r( v
Diags.setMaskMeta(/ `: G% F4 J. J4 I* c
    "xdc.runtime.Main",
; m  V- T+ O8 z0 A$ D9 g" D    Diags.ENTRY | Diags.EXIT | Diags.INFO,: j1 ?* M. b- f3 L( Y/ M
    Diags.RUNTIME_ON
" A( ]! ?* G- l) o" ~5 @2 Q! b! T);: N& O  F" \  _% V( I: }# p
5 }( `  n9 s# n& G! i# Q: h+ D
var Registry = xdc.useModule('xdc.runtime.Registry');# Q9 z- }) G" C; k8 L3 ]
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
! Z4 I% V7 Q4 J8 ~3 G3 n6 T6 C* |Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;( s/ a, h4 p% A. C
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;7 A% S5 ]6 V. {% p
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;2 x9 D5 C* J' L  Y6 h$ Y

4 e$ V+ [* }' ]/* create a logger instance */+ {  l, w6 {& w! |% \- K( f
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
% X2 `/ i7 D% ?+ W; d% b* p! ~7 wvar loggerBufP = new LoggerBuf.Params();( b8 n* ^. p3 L3 b
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */6 M* n( G6 U3 w/ T  z, [
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
, y. Q/ y7 }, A7 r$ S9 s: G# P  l+ O% Y7 ]+ b2 c8 M  a
var appLogger = LoggerBuf.create(loggerBufP);  Z  D/ q, j7 J
appLogger.instance.name = "AppLog_Core1";: z/ y# C& Z& w/ U# G
Defaults.common$.logger = appLogger;4 z+ l3 T/ `; |5 r
Memory.defaultHeapSize = 0x8192;    & C4 f, M, o8 a  h/ b
Idle.idleFxns[0] = "&LEDStatus";  P1 l" E- a7 l+ z+ c5 ]" u9 `1 m
Cache.initSize.l2Size = Cache.L2Size_32K;2 f- h4 E; ^! E

% k5 ~; P( n+ q" {4 v
回复 支持 反对

使用道具 举报

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 */3 M6 v# P+ m& K+ D
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');4 `6 C; c; A8 W; r! O- @1 M
var heapMemParams = new HeapMem.Params();; d$ U; V1 V7 T- d; q* h  M
heapMemParams.size = 0x4000;
! W$ @+ S: f# ]/ _( q: c# p) ~+ D. L* P8 e5 |' j# g0 p
var Memory = xdc.useModule('xdc.runtime.Memory');% q9 Y. Z& l5 P9 U: S4 Y
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
$ l5 O2 G  t5 ^/ x! D: F9 m& d0 f7 V( v
我大约calloc  每次共计大小为5K*16bits,
. ^& r2 h2 {/ H而默认配置才0x4000、需要改大。
2 ]7 C: D0 g  [) F& j' t# l) k
' T6 y2 T2 _% f/ ?3 G2 F
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */7 |0 a1 e+ H5 X) U9 j
Program.heap = 0;
& ]5 i5 ^* Q$ @- JProgram.argSize = 100;  /* minimum size */0 y0 \7 n5 e7 y* T# k
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-1 23:04 , Processed in 0.041741 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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