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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
! w9 z, b- x) }$ e# D- }6 \  I6 }* I. `- u& E+ z
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
. f! z" R5 ]2 B3 e
* \# ^5 @* x5 k3 x! {9 ?3 j其他程序段。。。。。, X% a" H# z/ Z' P6 U

7 J4 v/ D+ ]% a9 ?' j   free(x_d);9 w  M" ?$ n0 v# f

7 Y) I6 I: A. x) `2 N) W使用DSP侧单独调试功能,验证动态申请没有问题,
: ]0 o  \$ C5 b* q2 C9 A. W9 M* a) T0 E5 W0 [8 q) H
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。+ J5 L  P) `. L' k

- U6 B+ l* b( N; o9 _- p5 D2 c
8 D) Z! V9 V+ P' q0 E2 i3 c* n9 n- c+ H0 U, V
) ]0 P/ d1 V$ `( [5 a4 l

9 c7 U( S8 u4 n7 y/ j/ q. e  g- y, I9 Y+ E4 C- g
# a# ~" W  R7 ^' i" e% C" x! T
! x5 x- {5 O! b' J7 H- L  |, ~* Y+ T
* G$ z- e( K$ P# q. {  O9 m
2 A5 h5 T7 K- [) e
分享到:  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 */  f! @6 v! P5 b, m" _8 G
Program.heap = 0;
5 ]! }5 P& l# {# d; v7 |Program.argSize = 100;  /* minimum size */
. n, z+ c9 x1 T) u4 _+ P6 TProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
( N7 N* I+ q6 J6 M$ ]( k- qvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');+ }6 j5 H+ `/ Q3 p) ^: V! e: g0 P
var heapMemParams = new HeapMem.Params();
/ {' e& T& u, F& Z! ^heapMemParams.size = 0x4000;
+ v+ E. c$ }# f( V; _. U& B2 O. k
+ L6 E* D6 k0 b1 m. Svar Memory = xdc.useModule('xdc.runtime.Memory');
  M4 s) u& y* [/ x3 z' UMemory.defaultHeapInstance = HeapMem.create(heapMemParams);. q# M& i" ~' [
6 \) J% |/ J6 X) u7 z
我大约calloc  每次共计大小为5K*16bits,
& o7 l5 O; e/ i* `而默认配置才0x4000、需要改大。
; o% S2 }9 O5 D* f1 U  U8 F) [6 s3 j9 L! U  o' l- u
回复 支持 反对

使用道具 举报

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, s* C1 J1 p5 F我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下! q) n! V; t7 `1 k* P; \
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
" q* l  L) @+ M
8 e0 v; c( F8 b
是不是需要在DSP.CFG中进行配置
2 t# a, o, H, E3 v我现在的配置为
& d! X7 j6 ~+ ~8 c9 d  h) @* Y
$ Q" w4 |! W+ O$ a/ R' [+ K0 N/*3 S! @+ d  y" ^) U. t' z
*  ======== Operating System Configuration ========
# c, o* S: s6 z* l. [1 i- \ */. ~% k. G3 C: B- s5 _

: Y# G# K  m5 C$ [' e1 ?$ i: J/ O/* no rts heap */
2 G. H2 c& I, S( T. k# C' vProgram.heap = 0;
$ j& {2 G& J4 [# D1 N. {6 zProgram.argSize = 100;  /* minimum size */+ y  G" X! _+ {+ V: J' V
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大% a2 I- n& Q- ]/ g- v$ _

) Y7 e+ @$ e$ y" X; J/* create a default heap */# T3 S# _1 C. H" ?
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
) u8 ~0 }5 O( X& }; `2 `var heapMemParams = new HeapMem.Params();) W$ d: ]% N' f! `# A
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大) Z% b: H/ }1 T

1 \" b$ I6 x/ }) |
var Memory = xdc.useModule('xdc.runtime.Memory');- e8 S' j" e" q2 P6 T
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);- p# U5 g! Y  A& [
; w  @+ F6 T9 X1 T+ ], k0 |( ?( e
/* configure System module */
/ o: }: h% J, Evar SysMin = xdc.useModule('xdc.runtime.SysMin');7 R: o# u1 E# E
SysMin.bufSize = 0x1000;0 e. P5 h6 p# U) z( ]- g2 p
SysMin.flushAtExit = false;# c. U5 b0 f; p3 O

% [$ h0 P; C8 _8 Q: t$ `/ K+ {6 uvar System = xdc.useModule('xdc.runtime.System');" E" v. w  w. W6 [2 R( v7 A& G4 b
System.SupportProxy = SysMin;
" g  `) U; R1 v; e/ Q9 z: L
2 ?! d4 Y, j+ t/* configure SysBios to use the lower half of Timer 1 */
5 ]2 l/ F% F/ V7 C5 [- Uvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
& _, _6 q- I: e7 ?0 m- A% Q1 Bvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
, {- U' G  V. _# z" PTimer.timerSettings[1].master = true;
/ Z. S/ {# @/ k( X* w& m7 STimer.defaultHalf = Timer.Half_LOWER;, `2 e/ N, R$ U& `
Clock.timerId = 1;
1 [/ g9 A) a, ^
8 o. q; ?6 l/ g6 b6 K3 K
) |6 E/ q% q+ B( l: u# r/** F% Q7 J# ]& R9 W+ [7 k
*  ======== Miscellaneous Configuration ========
9 `1 l/ I3 B( ? */3 c. i5 w- _7 n* ]' l

; j. y% m5 y4 G: t) S# o/ q1 ~9 J/* set default diags mask */4 M6 Z* C0 t+ ^6 o4 s2 x
var Diags = xdc.useModule('xdc.runtime.Diags');
1 ]! [0 j$ |& W7 m' H* Q1 Zvar Defaults = xdc.useModule('xdc.runtime.Defaults');
6 Y" J5 Q# h% a' s2 Y5 T7 |7 }  w3 ?3 @- q
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
1 X) \# J7 i# H  H, z; l5 RDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;' f+ n$ m, F) e/ `( |# C. J2 ^
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;: K1 @$ I$ U% s  y
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
- u) T7 q' a- |4 h+ EDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */' ^3 u1 B% O# G+ q6 P
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;5 U& Y+ i* _7 C  I4 ^
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
0 I$ t" p9 O6 h  G+ A$ @Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;- b2 U) W! c* B& s/ E
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;9 s; E  `2 f: v' z% V
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;7 w4 v8 n2 }8 I- S2 L3 g
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;4 d6 ^% P9 l0 L, X1 t
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;/ s* O' w( q# W; B, f
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
- l5 N1 B* ^* K% UDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
2 X+ `* I# K) P& u5 P( `1 ~: a' h9 e  e
/* override diags mask for selected modules */
6 @( ?3 e7 W. \4 _, @. Oxdc.useModule('xdc.runtime.Main');
6 w$ D. y9 g6 J% D2 l5 wDiags.setMaskMeta(/ G+ Y" X7 s  U) h) e' q
    "xdc.runtime.Main",9 @$ `; c! T4 L
    Diags.ENTRY | Diags.EXIT | Diags.INFO,% d7 ?5 H6 F3 |: @" I$ T: F
    Diags.RUNTIME_ON3 b7 v, A4 s) i. W
);. O5 N( M5 J5 |  b: k
! t% g& B3 y& [+ y
var Registry = xdc.useModule('xdc.runtime.Registry');
# ]  o( s5 b7 ~. E9 g0 a8 GRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;0 u; c: L3 y; ~, x% p: Y% r9 o* Y
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;$ }# ?8 `$ e2 e; I
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;! W' h; o8 ?9 {: d* N
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;& ^9 v- @6 |+ S# [4 @# B: B/ K" T  E
  r0 K- X. ^$ m: g* W$ ^
/* create a logger instance */" s7 t( f& S& s0 Y
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');( ]% ~; [: C, q, y+ w
var loggerBufP = new LoggerBuf.Params();. @( p5 E/ Y& [: y3 \" F+ h
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
4 q: X0 \9 u% I: x% ]0 m9 `loggerBufP.bufType = LoggerBuf.BufType_FIXED;
4 o3 s* w; s! q2 L# H! h/ `  I/ k' u+ W( Q. o+ |
var appLogger = LoggerBuf.create(loggerBufP);
$ A% M) X, x1 C/ s# t- `( o. H3 E8 uappLogger.instance.name = "AppLog_Core1";
7 s) Y8 \# o0 H& rDefaults.common$.logger = appLogger;
' X5 ^- X: `, G' zMemory.defaultHeapSize = 0x8192;    - x' Y( j8 s- J4 [* S( _) D
Idle.idleFxns[0] = "&LEDStatus";
# g3 N/ p$ l' O. {Cache.initSize.l2Size = Cache.L2Size_32K;$ V! n, h2 C' z% S+ j/ O
) v2 g9 E& G) c3 p
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-4-2 00:21 , Processed in 0.044784 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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