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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
0 p* A; L! `! K$ M4 @- I1 h# ]7 V
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
  y  v( r/ H4 K' S* {, u; p; K3 ^) J
其他程序段。。。。。- s  ]& g, K! D+ L1 W# u3 u

8 K' N5 r, x0 o7 ?6 y7 f8 h   free(x_d);9 b! o' T+ o$ z+ w) ^0 n  ?
; [2 z7 }3 _! f2 D8 [
使用DSP侧单独调试功能,验证动态申请没有问题,) e& t4 O0 U3 Y( r+ r
9 O* W4 J: C* U6 l$ p
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
) P* [2 X; W- z9 C! h

: E5 C( m1 {0 n! z0 u# w) }7 ]
! v' [: r. @4 j/ T* f+ W+ Z. x' l6 g0 q9 H' k" j
" C9 _& v2 P; G
( A1 ]5 }/ s2 h! ?: J

3 N" \* A) ]  r! l, S! [9 m) A; q: y% i6 Q

6 N9 o8 O* y1 x9 T+ r- {' |0 d  n' @/ K
+ t, d+ N- d. N6 n9 C1 `5 ?5 h
分享到:  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 */
+ I5 `; B  {0 j2 PProgram.heap = 0;
' q- x( }! A1 Z0 B, tProgram.argSize = 100;  /* minimum size */
% Y! `5 `2 A. S$ i2 C8 m4 }, r- t% h1 cProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */  Q, J3 C* z) s, A/ g0 _/ ~/ Y: R
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
& h! ]+ T) ?. \# V/ a5 r- F3 X( ivar heapMemParams = new HeapMem.Params();
; N8 X( s, M7 m8 s5 oheapMemParams.size = 0x4000;
' r' y: A: f6 q* i9 _5 t3 \- g4 P0 Z) J4 n) E/ @$ ?* M
var Memory = xdc.useModule('xdc.runtime.Memory');, f7 l9 v2 |" R5 d3 F, g: u7 ^
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);  L& D6 J: {+ R
$ n) x2 ^' M5 x3 w$ L
我大约calloc  每次共计大小为5K*16bits,& t  W; L9 N9 R# ^. e- M
而默认配置才0x4000、需要改大。4 L# G$ _& n* N6 e% _; ^6 W
# p) S1 R- l! A$ ~6 E1 R9 c
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明
9 u1 d; h" y7 ~) S我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
- _2 K& W0 Q7 T" l/ z+ @6 v+ Z9 J(不过疑惑的是,为何单独DSP仿真就没有问题呢?)! D0 C4 p" n  G( k

+ J7 t) c* n0 _" ?* d# _是不是需要在DSP.CFG中进行配置
: ~0 j) B, Y/ W9 {' K# ]% k% X我现在的配置为
( P6 q0 P. b$ U7 y0 A' n
/ X8 u$ h+ G% e4 T/*
; Z; q2 w8 X9 L5 `6 |9 w *  ======== Operating System Configuration ========
, O+ X% r: {" \) {4 l0 z  v$ t5 ] */; k, m6 R! N1 m+ A1 s: A
: w/ U7 |$ p- c' C7 S
/* no rts heap */
9 S* J( q9 k  J- Z9 pProgram.heap = 0;# s3 _+ X- W+ e1 b( o" b
Program.argSize = 100;  /* minimum size */
: l; B8 j* e+ @8 r" ?4 C# x$ `Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
! d4 T" w3 E$ B& {3 a# T9 X* o* \
. g. T8 Z7 H) Z- a/* create a default heap */$ J3 ^( }1 }/ A* u/ C
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');4 [- X# {& \# w) ]% C1 r% A' N
var heapMemParams = new HeapMem.Params();, C% R8 ^* ^9 v0 Q$ [; Z7 T
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
5 O8 t1 H+ K$ h. k: N4 R  i- M
- p' |; B( ?6 b2 [
var Memory = xdc.useModule('xdc.runtime.Memory');+ Y0 d6 `* K4 E2 [/ m
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);  E! [: b+ A6 }2 r) k

, b1 u3 \' u' b, i7 n( T, |" d/* configure System module */
+ Y5 g9 d8 U1 i  e( @. g2 K3 `& Ovar SysMin = xdc.useModule('xdc.runtime.SysMin');% K# s7 d0 T" y  v- C
SysMin.bufSize = 0x1000;, G/ t. m9 d: A. ?0 {* [
SysMin.flushAtExit = false;
: N: _% d  T! b3 u+ G- H/ ~7 H, A0 {: B. ]  ?, ^
var System = xdc.useModule('xdc.runtime.System');  N+ _* L2 c5 ]+ N7 |0 D- C% Z3 _9 a
System.SupportProxy = SysMin;
: L; n. r8 }/ ~' W9 i( h/ }4 Z  U
/* configure SysBios to use the lower half of Timer 1 */$ K) Q# u0 X3 e$ ]
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');' m: y' D/ P3 [
var Clock = xdc.useModule('ti.sysbios.knl.Clock');7 u  [7 ~$ F& |# s
Timer.timerSettings[1].master = true;
4 s! n: }( A9 C! F( [Timer.defaultHalf = Timer.Half_LOWER;
5 \7 U: Y0 U1 OClock.timerId = 1;
4 c0 U% [. D" J5 y. ]% k5 X. M( p; l! w. `1 [# s) @- R5 R

$ o  N, g$ }0 A: t! C: @2 G- `! K/*0 Z7 I1 ?) W% S- Q6 v- n  N
*  ======== Miscellaneous Configuration ========1 I. {, B6 f$ Q1 b, K$ ~8 b
*/
6 `( p2 P2 R0 D9 |
$ t: _+ g1 `) q% m" H- N% Y. N3 _/* set default diags mask */
2 m0 k$ e- h! T2 {% h& I% xvar Diags = xdc.useModule('xdc.runtime.Diags');
  A8 }/ n6 t$ ~6 V5 d  L6 g5 wvar Defaults = xdc.useModule('xdc.runtime.Defaults');6 I$ V- f0 P4 s9 Q

" e+ K" T; N- l# V, b8 K9 GDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;% H( p- Q5 H  Z3 Z* z
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;1 Q; x0 ~) ~: i( X
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;3 ^/ T0 Z( {! w3 `
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
6 y+ U, D9 w* g8 P( L  @Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */% d0 U- N/ T1 H. w/ R7 u" V& |
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;4 D9 b* h- F: b  p+ u$ m
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
3 K0 y: e9 ^, [6 u* f0 \3 j) |Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
9 e2 Q8 q/ z8 x5 ^( w* T$ [Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;9 ~) M4 j7 V/ V" ^. v- a* b: d" o1 k
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
, ?* {. ]- {5 n, r- @; ^2 UDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
1 f% b  x/ j8 b' KDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
7 O. `2 y- w; J4 G$ @Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;9 k; C! b- \' Q9 o
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;( B3 B, s9 V+ @& E. S( I( S; V

8 D  M7 A% i0 s- V. Y. o# S/* override diags mask for selected modules */2 J" U9 f6 k8 K. Q2 G. s! Q
xdc.useModule('xdc.runtime.Main');' O( I& t1 U/ }4 F  v$ l
Diags.setMaskMeta(
( F5 I( X: Y& p8 i# b3 G    "xdc.runtime.Main",
, _6 m+ p  ?/ o; {! g    Diags.ENTRY | Diags.EXIT | Diags.INFO,
! d  E+ y& W- ~0 y    Diags.RUNTIME_ON/ b( Z9 Z# |) @% V5 f! c
);
8 O$ G, O6 B  K# i2 b+ Q( {5 \- r/ I1 s
var Registry = xdc.useModule('xdc.runtime.Registry');
- X. c* B3 S1 X  V- iRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
* p+ Y" E6 W# rRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;5 E. z9 ~& c7 M+ h7 @& ]
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
4 {& h+ ^  R7 H' G/ zRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;% w8 M$ X' ^2 u8 @; U0 L8 V
* `7 W3 s; Z. w" G! E2 v: b
/* create a logger instance */, Y& t0 v( K6 b/ |/ g. p0 _. d
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
1 }% Y1 Q8 S4 ?) ^+ F( g; |var loggerBufP = new LoggerBuf.Params();
/ u. W6 N' H: n6 gloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */# ~$ [, o* N" c: ]8 F
loggerBufP.bufType = LoggerBuf.BufType_FIXED;' S3 {- g/ E6 S% Y

0 b; Z1 u7 _& i  u. Avar appLogger = LoggerBuf.create(loggerBufP);: j) W) p& n/ s: ^# P
appLogger.instance.name = "AppLog_Core1";
! o! O$ m* {+ N2 ?/ u8 _Defaults.common$.logger = appLogger;
# K$ r1 P# M5 B' L4 U5 J- X' cMemory.defaultHeapSize = 0x8192;    1 U! E' ]0 f$ |5 \! ^" W: `
Idle.idleFxns[0] = "&LEDStatus";
7 u7 T7 I0 `6 wCache.initSize.l2Size = Cache.L2Size_32K;
2 p* `2 C  p1 B: {
$ D* o1 ~" G3 X4 n( m
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-28 09:07 , Processed in 0.043675 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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