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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
1 f4 p$ L" E$ K! c- V5 j. Q
* F$ X1 u7 q" \" B5 K    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256' V3 }5 |& x2 G1 L: i

0 D2 c5 B5 ~- f. V其他程序段。。。。。' ?  g5 Z5 Z. p5 A' h' |

( E* r( d1 C, A: e" x& b   free(x_d);2 p* R- ]( Q& m- }  K+ t9 k- h

: n$ p/ j. @" G- K" u1 I, b2 ~使用DSP侧单独调试功能,验证动态申请没有问题,
5 k/ M+ a& |' j" d; D5 H3 h* K: k# l6 n% J) _, C9 t
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
) p% {+ x, o) u: f8 ]+ i

8 ~; B" B5 \: z3 T
* Q/ r- ?+ k: e- o4 Z4 b& _% ]8 _( q4 y" `0 ?7 D2 F0 w# v

0 i3 F3 T: O* Q9 D# u1 i! \0 v% d$ V& I2 g' X
% }/ d0 K& B3 E7 }6 g+ }7 i) V
7 K6 x! |3 O( Z: p! i$ R& O
6 s" L. n4 \$ x9 Y0 |+ ~, v

1 B% X: Y+ [5 J+ B& A3 p
' u8 S1 p" Q/ j! a$ E: i3 d
分享到:  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 */
1 }# I) S3 o& b( h- b4 n( ~Program.heap = 0;3 G8 ^; b$ j/ i, k. V& d
Program.argSize = 100;  /* minimum size */7 P7 J3 h1 h2 C$ l9 O# g: i( k
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */1 C& w' p( i/ M. d! X3 ~
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');: O* C( u. ?3 H8 K
var heapMemParams = new HeapMem.Params();
3 j/ a, s+ P1 I; e: bheapMemParams.size = 0x4000;
0 N' C6 y3 m1 |  r8 q' ~! Z5 M* p  I; K) t
var Memory = xdc.useModule('xdc.runtime.Memory');
  P1 S1 {$ c7 d6 q- eMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
9 {, T6 m& }  Y- o' w0 R/ l' k; k5 x, q: I
我大约calloc  每次共计大小为5K*16bits,' w% {) p: v. h* y- x
而默认配置才0x4000、需要改大。7 `, J& u% N( W1 P% ?4 L5 X  d! o

5 r- v) L4 h% Q& ^4 P* 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 | 只看该作者
补充说明
* Y8 b2 H  O8 z$ U: h& y5 E我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下8 h: O# y1 \* ?7 o5 K1 B
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
7 X/ X2 r" O7 X7 O6 G4 g

1 R. o2 Z3 \4 `8 b# {8 X; `是不是需要在DSP.CFG中进行配置& F; |8 o& i" C4 B- m
我现在的配置为3 d' @# A6 Q: D3 z& G: T+ K

( n, w+ t5 w4 }4 N; l- Y" N/*
/ `$ E6 F# }( V+ N, } *  ======== Operating System Configuration ========
/ N2 _' y* N: s4 h( o: ? */
! z7 q% m/ J+ \# s" ~: h$ C, I# a0 t
/* no rts heap */" s/ B8 |! ?$ x' Y, D0 W
Program.heap = 0;' ^3 w* [  T: @$ k$ C! g, r
Program.argSize = 100;  /* minimum size */
2 [' F4 s4 {9 X0 |3 MProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
9 H: _2 u/ }& P2 s
+ R# p0 e  {1 i$ ^9 J/* create a default heap */
/ u4 B. H( r( r4 B) F; d  }var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');. c/ S/ `: A. P6 I% y9 V9 O
var heapMemParams = new HeapMem.Params();0 U; V# {+ N- L2 b- Z8 [3 A
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
0 \( A* N' \$ |. s/ A' E  k& P, S1 v( |, F, \, j, a
var Memory = xdc.useModule('xdc.runtime.Memory');0 p; {: [, {- {/ q2 F6 }- L
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
% s- e# Y* c  Q9 N* i6 B  n7 J2 `( X9 f& J* f6 H
/* configure System module */
& {5 w( L, a% J! Svar SysMin = xdc.useModule('xdc.runtime.SysMin');5 `9 s( z# `" ~( b( R9 d
SysMin.bufSize = 0x1000;
& |0 L3 u# d$ O2 A; \SysMin.flushAtExit = false;5 J  f: O! R5 H. D! b7 P6 f# \

4 T) A8 G8 u+ a+ r( _6 Bvar System = xdc.useModule('xdc.runtime.System');# `6 M; z* Q" U6 ^, e7 M; Z7 l
System.SupportProxy = SysMin;
. z+ w: l5 `& W7 P# L6 K7 I7 S# a5 G) R8 V' \
/* configure SysBios to use the lower half of Timer 1 */6 Q. i  o: q1 e- o2 c
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');9 ?/ L0 O. G) S+ o' s
var Clock = xdc.useModule('ti.sysbios.knl.Clock');; W4 R  }/ l' S3 s" O
Timer.timerSettings[1].master = true;  z# Z  b6 i' W1 N$ D* f: W( A
Timer.defaultHalf = Timer.Half_LOWER;; P& p* t1 j4 [6 f( c7 n0 R; w
Clock.timerId = 1;$ M% u/ X* ~, |8 D+ W

: u2 p! w7 B9 k+ M: t" [' s
+ R' p% g, C+ s/*
1 s, O! E& f7 y- J% p* x! K *  ======== Miscellaneous Configuration ========/ @; B9 o- X+ t+ r( S8 v
*/9 Y& W2 ~* ]- ]( `# j% g+ T+ c& A

3 n/ ^) w, \3 I/* set default diags mask */
  w5 W7 P( g& }' O+ C1 Zvar Diags = xdc.useModule('xdc.runtime.Diags');
: L; m4 `1 i2 }# i0 qvar Defaults = xdc.useModule('xdc.runtime.Defaults');: O2 _4 }) I, R

6 P! M+ L% ]: j& R" sDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;( i4 l! {2 @2 i! m, ?
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;1 X* m9 ~2 V4 [. _4 F
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;, _" I: }) j! u6 L7 s
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */6 l( B  c4 _- j- D4 }( `, ^/ |  [
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */& B8 t8 P/ ^7 Z5 ^8 W# n
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
" j* e: P& I4 A3 |% M& z" l! CDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;% a( I) h  L/ L+ z7 B# ^
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
* p2 F9 Q. j7 A" }# gDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;8 V' a5 w7 U+ M" A1 h
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
3 N2 c; c8 W/ @Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
2 i, {8 }- a+ v0 l2 qDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
( A$ T! ~* y3 S$ I0 `; Y+ WDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;! p1 T! ^/ b( ~+ l2 _1 U
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;5 F- }+ z1 M* _9 |0 a, r
& N* l  U- j8 G+ K, m1 L& X
/* override diags mask for selected modules */5 `% x& D: l3 n3 L
xdc.useModule('xdc.runtime.Main');
# r9 t  z' n0 S3 O$ @Diags.setMaskMeta(: [; h* q: e8 e. @- j, T1 q
    "xdc.runtime.Main",; i1 `0 W7 d  }, D
    Diags.ENTRY | Diags.EXIT | Diags.INFO,0 q8 U( d* R; A/ k& i! ~! X+ x
    Diags.RUNTIME_ON
0 ^% o4 b: s2 m. t4 D, T! P' X);: Y2 B" b- b" J; \! ?# Y, p6 E

# Y. h4 V% u1 L; B( e# T3 C! }var Registry = xdc.useModule('xdc.runtime.Registry');
4 @: L: j1 ^5 Y1 m: X5 IRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
) [, ], {4 L) l- N1 Y/ O! lRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
& G& |) O* w- q- n9 ~Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
5 B4 B/ M$ t( o! P4 p$ cRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;' S0 S+ {1 z/ R5 u. b7 z
0 \) P1 T& E, b% M2 f, g
/* create a logger instance */
* {# ?0 E# u) D3 u6 fvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');( S- N" U" Z6 _8 P3 A3 H
var loggerBufP = new LoggerBuf.Params();
6 |. z/ t' M; ^, G; a. @4 M+ hloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory *// X3 Z( w! I4 g: J: g; V+ ~
loggerBufP.bufType = LoggerBuf.BufType_FIXED;0 G2 G3 s' U$ m! U

5 c) }" h/ n+ W& t9 yvar appLogger = LoggerBuf.create(loggerBufP);# L5 f! K' w# n
appLogger.instance.name = "AppLog_Core1";
  |' n$ p& O7 E3 wDefaults.common$.logger = appLogger;
7 o) r' U6 n7 f7 S! |$ |- O. DMemory.defaultHeapSize = 0x8192;   
' m, x$ ?+ Q" j) e& B4 K- fIdle.idleFxns[0] = "&LEDStatus";
, K, t3 \9 n" J4 X: [Cache.initSize.l2Size = Cache.L2Size_32K;) _! _  K. H2 f0 S3 {
8 _/ f% A% X' `' h( U
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-22 06:47 , Processed in 0.044297 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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