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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构, E5 U, j8 o- {+ T7 y5 X
6 E4 j4 j% w* V8 l$ h+ V) z
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
, D  y  d+ O' R& @( F7 N4 }8 l- _. i& C7 ~0 Q
其他程序段。。。。。2 r, J# L, _$ _, A: s! n

; Q; D* V) f% E   free(x_d);
" R# B* E; \; ^2 u) X  y3 F% X8 Z/ N4 ]& \+ o$ @8 C( @
使用DSP侧单独调试功能,验证动态申请没有问题,& x+ s$ [. P1 J6 U  o+ }2 n: e- Z" ]

. Q& k) q; R9 g0 u但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
: H5 M% V0 f0 c

9 I* I4 ?+ P$ ^' W
0 d( Y, z  G0 M- a
1 u) c  ~+ `, X( ^  ?9 l8 O* Q
/ R: _( p4 n0 \$ x: J+ N3 [
; P) m. T1 ~' H6 B5 b
6 }. R4 K) F; j2 _9 ]# V8 y) y! R3 x% u  H6 n

9 c; D7 H7 @& @/ I% G3 `7 z( {1 E1 Y# r

5 Y( q1 B! Z* D
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
. f7 f+ i, I3 [% ^# }6 m: f我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
) W$ u: x; b0 ?7 p- @- g(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
( A) r! D. `6 ?( t
& v. o  ?- T! S% a1 w) l5 x
是不是需要在DSP.CFG中进行配置
5 X0 k+ N( s4 O# e3 p% ^1 O4 z我现在的配置为
$ L; k7 \0 [3 M/ `
, D5 S* x# s% f+ n0 B; S" Y/*
1 ~; k4 t, z) _7 p, ^ *  ======== Operating System Configuration ========
/ d( w0 w9 [1 e  N: c! J' Z */
! a4 i1 K& `* `8 [
5 k% _- w/ Z: T) F# {' Y+ H$ m/* no rts heap */
; R5 R2 j' Q0 m* MProgram.heap = 0;
% K0 O- F' `' C; f2 \( lProgram.argSize = 100;  /* minimum size */4 }# u/ S0 `* x& \/ O2 R, ]
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
  d% C3 U3 p- k4 `: W' x1 y
4 k$ m; R( p  J% ^/* create a default heap */
8 f4 u' D2 Y; I5 ?5 q8 P: L7 |var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');! L( {4 H( f) g4 E' a6 u
var heapMemParams = new HeapMem.Params();
: o* {- z1 M' u7 [$ i+ kheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
+ \, S% @, t% ^; Z
* ^! K- p3 q! c8 W7 ?
var Memory = xdc.useModule('xdc.runtime.Memory');$ J  @1 W. N5 d( A1 Q4 \
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);( f7 U8 h/ X: D7 V5 U5 W/ ?

8 I6 W; S! T. k1 C3 R/* configure System module */! @4 O; g: l$ e& e& ?' w
var SysMin = xdc.useModule('xdc.runtime.SysMin');
0 p2 }& N2 b, Q/ i; O$ r& X7 }% OSysMin.bufSize = 0x1000;
5 b9 N; x5 k3 v# u, j+ VSysMin.flushAtExit = false;. r" w8 u" [# h( i; K* f. G  ^
; |" c! M& `  S$ [( v$ V3 a+ y' e" a
var System = xdc.useModule('xdc.runtime.System');6 w+ M, E+ Q' q: v7 [( ]! @# D  D
System.SupportProxy = SysMin;. m( A6 ~/ X7 r% c2 X# k

% r& ]3 b; q( z$ N, o6 l* p/* configure SysBios to use the lower half of Timer 1 */* I8 Z2 p" M  H" D' [+ z8 n2 J% b
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
6 P% l4 M2 A' S+ Cvar Clock = xdc.useModule('ti.sysbios.knl.Clock');, o, t8 S( \, h. z- `
Timer.timerSettings[1].master = true;0 r) J3 b  c, c$ T  M# U% |1 E
Timer.defaultHalf = Timer.Half_LOWER;
: D5 s$ V, g# h9 Q% O) tClock.timerId = 1;* R  F7 }4 s" c3 u
$ y5 |: X$ R  w' b8 r

  t$ {0 F# w4 J& o/*
' t% e4 m9 G9 |5 i# c0 E! Z *  ======== Miscellaneous Configuration ========
  l- t+ v* i, R  p! ^" ^ */
8 e. _* w+ C) ]5 ~+ r+ S& e3 D) D0 _- ?
/* set default diags mask */& s) \7 ^8 T, U8 B0 V$ {' g$ C
var Diags = xdc.useModule('xdc.runtime.Diags');
2 f5 E  D2 T; v4 C: }var Defaults = xdc.useModule('xdc.runtime.Defaults');
( g$ q; m" z" k8 y" J& b: q
" v6 X* _9 r! v3 j) r. e/ fDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;% C' t1 Q, w" g
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
7 g: p% K( b& k4 UDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
2 d4 W. h. X$ VDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */& p0 S+ k* u0 F6 S
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
4 x+ T7 {, `' r, C/ hDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;& T9 k1 K) ~$ K$ y, `% ^, x
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
- D6 \( G3 u0 H; a2 UDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
2 h3 H1 Q) }+ q+ k9 H0 Q% \Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;2 l, I$ y  Z) |1 x: f* P8 I. J. f2 t
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
" Y9 N8 k1 j) w0 L# n& iDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;, Z+ r! A4 K6 K3 @. w
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
  B5 [% ^9 s0 }- f, oDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
$ e+ b+ [+ _0 a! `3 zDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;! {  K- L/ ], o( L- C& f+ T

) p' A! v3 }$ V6 y) M/* override diags mask for selected modules *// C& e& k, X9 H3 `" z! i# R0 x
xdc.useModule('xdc.runtime.Main');. X( F: o, s7 j) T) W5 }
Diags.setMaskMeta(! d6 z  I9 d4 K( S. }  r& \
    "xdc.runtime.Main",; Q: k" C# G' D! m# m5 \# u
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
" F, n+ c2 k8 j    Diags.RUNTIME_ON' a. C* e+ B! Q# w4 C4 d
);
$ ^- Z) k: _% z8 g3 }; G0 O$ _' ~5 i  r& ?; A  u1 R' z; G) P7 ]
var Registry = xdc.useModule('xdc.runtime.Registry');
0 D$ T. _9 `5 s& _  BRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;9 R1 C9 O! d3 D7 T  z
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;/ \+ R0 a! z7 s& F3 n: q; Y
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
0 I$ T$ L) x( \1 I- ]) [! w: yRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
2 H( h- @/ y2 f& o0 G% C: s, v* G+ u1 e8 }  Z
/* create a logger instance */) F. a0 p8 b+ G, j) ^6 @
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');; {, M/ q8 p" M
var loggerBufP = new LoggerBuf.Params();
6 S. M0 e3 ]+ G  K/ \: NloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */2 r# o' H, t' \+ ]' U. }% r8 R
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
- }) [9 C3 r7 D6 k1 {$ G8 I: i8 u! Y2 f/ l+ g. P, \
var appLogger = LoggerBuf.create(loggerBufP);1 w! }/ D/ J( T2 X) s4 E! h# i. ^
appLogger.instance.name = "AppLog_Core1";% E/ _" k( r6 Q9 q# [
Defaults.common$.logger = appLogger;* i( ~% r. ^1 J( o
Memory.defaultHeapSize = 0x8192;   
# h5 t. _4 X" `- C8 kIdle.idleFxns[0] = "&LEDStatus";. c; J2 z+ F9 n/ r
Cache.initSize.l2Size = Cache.L2Size_32K;% |' e$ u1 v+ [4 y  e* z% G

, O: F" K1 p5 S8 [
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */' A5 M; p3 ~* F7 Z; J: P# r
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');3 @( m4 k" j7 t* \$ D* v
var heapMemParams = new HeapMem.Params();. Z$ |+ o: u1 Z8 d
heapMemParams.size = 0x4000;  P8 K9 m2 Y/ O  L! A  q/ a
5 Y- w8 s3 w7 d- K  d7 y  ?
var Memory = xdc.useModule('xdc.runtime.Memory');
3 y. \- x* ^3 `  {Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
, N0 S+ @+ T. b; {" L0 P  y" R; W) s" O6 m& R+ c
我大约calloc  每次共计大小为5K*16bits,7 ~4 a. t9 _( B2 B
而默认配置才0x4000、需要改大。
4 {" j% [4 @+ I, V1 s# [# m. d3 }! j
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */5 U0 Q6 w+ a; S# l% i
Program.heap = 0;3 d6 n; L) I9 s
Program.argSize = 100;  /* minimum size */  I' t- J1 Q2 V3 w5 l" y
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
6#
发表于 2015-10-31 20:55:50 来自手机 | 只看该作者
这个问题,我再测试一下,过两天实测后给你答复!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-3 18:04 , Processed in 0.049312 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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