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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
: z7 e8 R* W4 s+ f/ g! J: {1 z, w7 [+ L% y' s" _1 x* G
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256" M7 [3 v7 M/ d

$ H, q. Z7 h& [- z7 Q' k其他程序段。。。。。/ z% a" z4 _9 _& q; E5 w! x

8 E* ]( o$ _8 y' s$ {; \: i   free(x_d);' M" ?! O+ d! C9 j1 T# `; z, O

( Q; Z# `# ~/ _; O' h% v* o- z% R使用DSP侧单独调试功能,验证动态申请没有问题,
: D+ x; `$ j/ n, c
% R/ e- E) m) a- {3 U但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。6 y7 \; p; s8 y! s' K" h
2 B/ h2 c1 P( z% |/ Y. g* r
7 P3 {8 G, Q! J# O% s  T9 K
/ O3 t; `6 h4 v: S# Q- a
! ?+ f6 F# L1 T. {) y" {

' K8 G$ T: N( u
. @$ a" N$ _) S" c0 Z4 ]! U
2 h# P& o4 a/ j! T
" X3 x. |9 E: N) y5 N( Z  Y0 {2 W: M0 n: c5 q4 l4 ]- K

' ~0 R+ m  S  R+ _% p
分享到:  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 */4 n' ]9 G8 g  b/ d
Program.heap = 0;
2 s1 F1 f6 d' XProgram.argSize = 100;  /* minimum size */
) P' }# ]$ t$ t6 ^$ J5 n  kProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
7 S6 U' f* w0 t1 W. Q+ y$ z/ dvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');# {8 V. s3 S! T  ~0 p4 q  f. {
var heapMemParams = new HeapMem.Params();
  ?$ s3 O* M7 OheapMemParams.size = 0x4000;
9 b" n/ _7 j$ x7 C9 K) I- ]% h! W7 l
var Memory = xdc.useModule('xdc.runtime.Memory');8 ?- j7 ~5 I' t' v5 ~2 V. b
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
+ u+ b7 E9 y$ D7 g, {& F3 e" L
+ |% m. v5 j" i! l我大约calloc  每次共计大小为5K*16bits,) n' _0 f2 L% H) n
而默认配置才0x4000、需要改大。
, L. O: S/ K  }# d) E; a. P5 \
0 L. B2 d! @. B8 C1 `4 l  Q
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明
( v! |3 b+ j/ A7 N我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
- G. C$ t; F3 I; \(不过疑惑的是,为何单独DSP仿真就没有问题呢?)% K; j$ n% s& p+ g* X7 `' x
9 r& d: y( l# I% ^6 X, W1 f5 y
是不是需要在DSP.CFG中进行配置2 n# }9 Q# [% @. N0 F( d
我现在的配置为
1 x) s+ t( s9 Z, {) Q$ i8 I' d: P
" i( d& j% l% h1 k/*
: [: ^' r! V7 g- G4 W *  ======== Operating System Configuration ========& c6 E0 k1 k, m, E% m7 Z
*/; p: y  R3 s+ N; ^1 H) X

8 n" T. S7 K) p+ l/ ?  [) J, S8 k  ?/* no rts heap */
& x7 f. v3 @! x- r9 k% K2 JProgram.heap = 0;
+ _& v* O0 Q8 ^) ?/ X* n, u8 GProgram.argSize = 100;  /* minimum size */
4 {1 N  V' q3 [: q8 KProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大/ U* E. v; w2 ~# c
: H1 p4 R5 I2 N3 T
/* create a default heap */
0 n, e, ]2 E9 D- O" L7 o' ovar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
& L* e8 M' \; h9 @' \, Vvar heapMemParams = new HeapMem.Params();) U9 t, L% ]/ C3 |3 G2 O
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大! r$ v  W. i4 j9 f
8 [. C9 m' A- P" r) B% [9 T
var Memory = xdc.useModule('xdc.runtime.Memory');
& \+ ]% X) p& n8 VMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
9 c0 x; s- X  L- F8 n. v# {3 e" U; ]# J
/* configure System module */
7 z1 N3 f) M) \, e4 Tvar SysMin = xdc.useModule('xdc.runtime.SysMin');
) }6 ?+ n0 I% i9 aSysMin.bufSize = 0x1000;% F7 I& O% G  [# x6 [5 P
SysMin.flushAtExit = false;
: T' a2 S, N3 R) L: X' r6 H7 P* U! v  @$ K/ a
var System = xdc.useModule('xdc.runtime.System');
1 J4 @# Z9 ]/ p/ l7 N- E5 o9 Z- vSystem.SupportProxy = SysMin;
3 |# O; ~) S: ]4 g( h
3 A/ O$ s$ _9 ~! ^  g& ?/* configure SysBios to use the lower half of Timer 1 */* U( L* O# V# H) M/ B8 S8 L
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
! P$ j5 ^& G5 L# Y* M, G" Xvar Clock = xdc.useModule('ti.sysbios.knl.Clock');1 J: B: T* ?- x
Timer.timerSettings[1].master = true;9 E+ X0 L6 ]: G1 o2 W
Timer.defaultHalf = Timer.Half_LOWER;
4 O& U" q0 L3 tClock.timerId = 1;: y, ~9 j  H2 `- D' W" j' f

% W- z6 L5 \; B6 g7 N7 Z
, X5 [2 N2 |3 x) K( F  ~9 Y/*1 q2 p1 D/ x! W1 C
*  ======== Miscellaneous Configuration ========
% E4 ], X9 H9 C' w */
4 Z$ f* W. T+ P7 l8 a* [; ^# b: Q8 B. E! I1 X5 z
/* set default diags mask */
$ O1 K! x+ r, J3 A7 l& y0 }var Diags = xdc.useModule('xdc.runtime.Diags');$ X8 F3 W5 t* E. ^
var Defaults = xdc.useModule('xdc.runtime.Defaults');
6 m# r; n/ i2 g+ K! S0 |" x) D  i9 ?7 R+ R  D7 F
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
4 [3 A' Q  D* q0 M# U6 a) C9 qDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;- y- m8 O* P, l" b
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;1 V7 o. T9 i% A% c' D
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */) i* B' @, U( \# E" W# I! b
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
/ l0 J" [3 x5 U  F- o$ H5 qDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
5 R% q- y& N" f, a, ~$ e* X5 }. a* zDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
, A: o3 y/ E! z! ?) r( L* y8 H3 wDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;& [& W( o, N' w  H$ ]2 d7 t
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
/ s9 B1 z$ x; A! t. e5 Y8 oDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;/ m' G& |5 n5 O. p8 m3 H5 ~: C
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;. \. ^, M9 c% i+ @$ C/ u9 X& M
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;+ X1 U5 v/ \- g9 Y$ z
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;$ S5 Z6 Z- L- \
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;  _1 @! m% i/ Z7 u2 W7 d) x
; r9 `- f9 c6 T2 b
/* override diags mask for selected modules */* k5 w" `) [+ \- j: \: w
xdc.useModule('xdc.runtime.Main');' J& @  M/ j/ b  p  F
Diags.setMaskMeta(
! N" v: |. p  L- h1 Y    "xdc.runtime.Main",9 {* Z7 Q" |' v5 ]
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
; G; D" W! [. ?- ^# T    Diags.RUNTIME_ON
4 V, E0 l" W: h1 v& ^! N$ N);
8 t, F3 q" P8 T: ]% M
7 B& M+ \' i$ @/ O% I$ pvar Registry = xdc.useModule('xdc.runtime.Registry');/ H% z7 p6 d! h9 j
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;8 ]. e/ y& w8 L
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
& X/ Y# b  E/ v9 f2 D- E# SRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;% `1 R% j$ |: C4 o4 l, Z5 n
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;% p# o2 ^9 B0 Q+ E1 d2 p
: N  G  m+ T1 D* Z5 M" m
/* create a logger instance */
4 t- r9 \2 o" E4 o  J2 ~4 k" pvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
) D( S' q9 z3 w% g+ Dvar loggerBufP = new LoggerBuf.Params();6 j( t3 d3 ]5 ]2 L8 c
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */7 C2 z+ G( N' B7 H: W# M
loggerBufP.bufType = LoggerBuf.BufType_FIXED;- t3 j: ~8 \3 L( t
  p0 v5 s1 R! s2 e" M
var appLogger = LoggerBuf.create(loggerBufP);
) V, m0 M) r4 I# ?: ?# l& _appLogger.instance.name = "AppLog_Core1";
. [: c6 E5 W/ ODefaults.common$.logger = appLogger;8 N+ s0 g. x9 N+ `# J1 r: J
Memory.defaultHeapSize = 0x8192;    " A& p+ [3 n. H. y; z: d. T
Idle.idleFxns[0] = "&LEDStatus";
% _1 c8 a& u1 mCache.initSize.l2Size = Cache.L2Size_32K;
: C3 i  M; L( y. U# |  S9 c+ F7 n( ]3 D
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-4-8 20:03 , Processed in 0.043973 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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