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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构; z8 L' V5 C# ^

8 N$ O% `& s6 `) b0 {9 B    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
9 s3 o: L7 `2 h( f# t( X: A. ~
" ?# D) J) j+ x3 L' s4 |2 `其他程序段。。。。。5 v( a, |/ p+ Z9 }5 u0 S! z, `7 o1 t

$ j7 Y+ @$ l- C4 [$ |' C   free(x_d);% W" m; B# q9 G' R$ j0 o3 j
/ n' N1 {! E  U9 T
使用DSP侧单独调试功能,验证动态申请没有问题,# O9 C. Y" i( L' i* k. F
* S) Z. T% }% {: W. ?3 p5 N! a5 Y- k
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
% `: x) E& k% [8 e5 }) v
# F+ ~6 O& R% P  w; R; ~  ^

2 m; J2 t0 t4 x' O3 d, ~9 W: }$ s
, a7 m' R0 B" P- u6 x
( M! e* E- R0 L9 D3 G( o( z1 F' k5 h: H7 Y' z" |4 E
0 k, W; ]) _% ?- A# f
6 \8 K' }( p9 z" l5 ~

& G" o) {* o% H7 m0 d, F
3 S: }9 C: J. Z. K7 s
, {6 B9 {6 Z0 d# b4 q% _
分享到:  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 */% U: V3 Q3 C/ w- p- q
Program.heap = 0;
! ?* L/ T* Y" W0 dProgram.argSize = 100;  /* minimum size */
# o. _& L1 }9 ^, i" Z1 \) U$ dProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */. T6 t4 R2 V2 C" K  o
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');$ D( M" |! t6 V6 ~1 `/ ~$ l) ]
var heapMemParams = new HeapMem.Params();
0 N9 t- x5 [# ^6 GheapMemParams.size = 0x4000;* ^( |/ G) E2 X

6 Z, l9 J/ U- C" @% b1 Jvar Memory = xdc.useModule('xdc.runtime.Memory');: T9 d! V. ~4 f" B' r' q  n
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
( S/ [" b- U1 U% e9 W. l7 `4 E* V! @: n1 K9 Z9 X: T7 J
我大约calloc  每次共计大小为5K*16bits," g  N0 ~. R- n7 y+ ]# M
而默认配置才0x4000、需要改大。
' `% [9 t% r8 p1 Y0 D6 S' M8 A( C: w( M7 A- x/ d
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明) H0 J; @' T; E6 K; I
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
% {- |! d5 l9 d2 m$ w! V6 s0 C(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
- H% ~% t; D8 b, r) K8 o$ V
0 \* }5 v8 d; c
是不是需要在DSP.CFG中进行配置2 H1 R& f1 }5 g. J$ L6 r
我现在的配置为$ v) V3 ~$ a7 y) l- A; o9 [

% w7 E3 n% A) E- T% x* K/*
* w+ F& e  Z4 ?' D *  ======== Operating System Configuration ========
/ W, k4 y  V2 `; }3 b */
6 d6 K1 _; k" [) U! o5 [( i" ^" S7 M
! _& @0 E# T4 b( |( s& c/* no rts heap */
9 r& }4 T5 v" |6 g. R9 XProgram.heap = 0;1 K. O9 l: y2 ^' x
Program.argSize = 100;  /* minimum size */
5 C! \% W: G9 E5 o6 H& CProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大- c  F1 K* n# `4 u( h6 ~

( ]! w6 p! z# a. ~9 y/* create a default heap */0 U7 g2 t: ^1 U
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');# g0 T0 q- B: @2 i1 V6 X  t& X
var heapMemParams = new HeapMem.Params();
3 ~; l4 v% y3 G7 E! Z( NheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大& V$ l! S4 J/ ]+ P" Z6 E. ~, i% S# F
, i$ t9 B. ?, b! b) |
var Memory = xdc.useModule('xdc.runtime.Memory');5 [" R0 |, H! M& E- x8 u! _
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);- w4 ]7 M; d1 z! Y

5 j3 [# f( |+ s* Y% d/* configure System module */
& N3 x* m& y! evar SysMin = xdc.useModule('xdc.runtime.SysMin');
- s: ^7 A9 R0 _7 uSysMin.bufSize = 0x1000;
. Z" w. P2 i- BSysMin.flushAtExit = false;
7 L1 V6 x' y" F7 s7 |
9 f% E  T. f3 f; ovar System = xdc.useModule('xdc.runtime.System');8 [/ _  i* j' _0 q9 o4 W* e$ F' k/ p/ S
System.SupportProxy = SysMin;9 w! S$ @1 `7 F% `/ C( ^4 r3 o
- s0 k4 r6 P" g1 I
/* configure SysBios to use the lower half of Timer 1 */( [3 N2 l1 F/ Q/ Q
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
! F3 V1 j( B2 Y, v: C" g  bvar Clock = xdc.useModule('ti.sysbios.knl.Clock');' `/ N# K! z& l7 @2 h, g* f8 c( M. H
Timer.timerSettings[1].master = true;
7 R$ x: r2 w9 u5 ITimer.defaultHalf = Timer.Half_LOWER;
! I0 W7 P8 V# oClock.timerId = 1;8 j3 ~" _( o% q0 F& p6 t  s6 T3 }
% b" O# d9 Y7 f( W' R: y9 F9 i

; [$ f$ f- @+ M; V9 B/*4 ]( E6 |; \4 B- P( i
*  ======== Miscellaneous Configuration ========  X, C; ]* C0 k& q" ^1 U
*/+ O9 \3 o- G- u3 L5 G- M
% x* @8 K. L- l" ^
/* set default diags mask */& O8 a4 P( J. K% j" K) V
var Diags = xdc.useModule('xdc.runtime.Diags');
. ~1 s) M5 ^& B. v$ v& K# Dvar Defaults = xdc.useModule('xdc.runtime.Defaults');: d( q, _5 X# v

; p1 c  }9 b* U+ v$ w  [/ Q' JDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
$ h! G6 F9 E1 K3 }1 C1 S; i4 wDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;" l( ^: _- c: x; F* E: B
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;9 W& W! ~; A8 R: C
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */! C3 Q) S- {5 Y% P
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
4 Y- J$ d) W# w9 JDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;9 ~, l3 a! d9 u, p0 Z& m! Z$ j
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;2 l7 f3 S3 w! F
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;4 K" Q# Q; Z( K: A3 `' S/ f( N6 E2 Q
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
( j9 e9 e( X! a7 j, NDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;  B. z( L" o* u9 M
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;* L# b* D  W, ?/ |$ ?# T; i5 Q9 B
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;! [* z' d( h; B# D$ y
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
. Y5 Q  }& M' l: [' j0 V+ q6 h1 qDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;& v, v! @% k/ _3 O/ G

" R6 D, P4 H: L* ^9 }/* override diags mask for selected modules */
# Q+ v4 d/ L) O# H) W2 hxdc.useModule('xdc.runtime.Main');
: ?5 T1 v: F6 \( B" ^4 `Diags.setMaskMeta(3 l7 |, c5 ]8 u$ k; l! Z& ]
    "xdc.runtime.Main",
, i7 J. t& o; y: P+ _. N    Diags.ENTRY | Diags.EXIT | Diags.INFO,
) o5 f+ R9 h, p; u  M) P2 A    Diags.RUNTIME_ON4 P% R) a4 Z9 e
);
. M, G; }( \* x9 d# D* @/ ^" r0 H- |; G+ j% A
var Registry = xdc.useModule('xdc.runtime.Registry');
6 l: y2 T/ e; j) c% lRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
" B* z* s. e0 {# T: A) fRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;. [+ P% j" R2 Y8 y; K% \* b
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
9 w6 t! A# F( v; IRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
' @7 z. M  T% }! K- }  h" Q7 p9 F& A2 l, S2 V
/* create a logger instance */0 \2 e+ Q7 V! K- Z+ G
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');. K4 u4 W+ ^7 A0 L1 n# h4 h5 u
var loggerBufP = new LoggerBuf.Params();9 f% V& O( e! k% G, n4 c9 B
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory *// d! k+ \! i* v) @
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
& p9 P- d2 H) D4 _; V  Z/ g- ^: r5 U: U
var appLogger = LoggerBuf.create(loggerBufP);
0 E+ o" e/ p: l! NappLogger.instance.name = "AppLog_Core1";" C2 w: {! i# u" q* L
Defaults.common$.logger = appLogger;. l4 {% q4 j( g5 J  z! H1 K. q
Memory.defaultHeapSize = 0x8192;    ! I9 d" W: q4 h6 [- H  ]2 K; y! V
Idle.idleFxns[0] = "&LEDStatus";
$ b2 {8 e2 W  ?  SCache.initSize.l2Size = Cache.L2Size_32K;! n% c) }6 X& Y. k' H% [( g7 w5 M; @

  Y& K3 p- r7 F5 z5 c/ Q
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-23 15:36 , Processed in 0.042124 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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