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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
" ^% L+ q2 v; ^: @
. _) b: Z! H9 A; O! }3 D4 }$ s    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256# _; {% i  L/ C+ u

6 {& M5 O, O  k其他程序段。。。。。4 c2 u) L( u+ @9 _" a! W$ k6 ?5 x
1 b9 D( f* V0 v* q
   free(x_d);
$ J  z! f& t6 N9 c' \/ I. N: c+ F0 s
使用DSP侧单独调试功能,验证动态申请没有问题,+ A3 Q. x9 K5 i4 x: H+ F) `4 l6 u
& N( W4 L1 H; T# Q- D
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。0 M/ p8 s( Q, {$ m& b0 s7 S2 Q" P( Y' W
! b* z) y  T1 s& p9 F9 g
! G! x3 S5 u( D; T- C) h( [
/ Q/ t! p5 E- U7 T/ T1 L

2 K; E4 t: [- V4 l6 k- c9 V
7 _! U5 n: l! T* l& J+ P6 I9 u  Z2 |( w9 S7 v, T
/ `# A; U# O( e9 \+ P

% n% a% V- X; g! h2 o5 L$ U# K: p" q" T8 @% ^

! k: Q& k: |4 I+ C2 Z+ t0 L3 h
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明+ T, i5 c# V" \" Z
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下" M( O; c6 F0 Q! ^+ b
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
8 V" ]9 E/ c7 N0 g
( O/ E7 W9 N* I
是不是需要在DSP.CFG中进行配置
3 M! F2 k9 s5 S我现在的配置为1 h6 j) m, }. |! [$ `/ X

, o8 F% {5 j$ m0 x* l, j/ m) h/*
1 ?; }$ Z/ @* `2 F' J, } *  ======== Operating System Configuration ========
% f: M. v; J9 R# e6 W */
) C, [0 u* E! ]$ ^3 f6 ~/ X* V$ G' ^. g. \9 i. m# ?& h. `: c
/* no rts heap */
' m! w) Q0 M( v* G4 \$ i. }Program.heap = 0;8 s9 ]. ?3 K0 f) v8 f# ~0 D
Program.argSize = 100;  /* minimum size */5 h! Z* d- B  [( z4 V- l
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
" f8 B' n5 ^8 I/ Y: s0 N6 o- t* D! K
/* create a default heap */" o/ p2 I: N. j# X
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
' y0 o3 `2 J" n, hvar heapMemParams = new HeapMem.Params();- _( `' x* _' S
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
* i$ o9 |4 V+ x+ g- E! T, j+ J9 O
! j, r/ ]  o3 ~2 y3 H/ M1 l
var Memory = xdc.useModule('xdc.runtime.Memory');2 h( q, i+ q/ ^1 f. G7 K
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);, W! ~7 s9 R- A1 Z# X; l
/ D& n% D8 y3 L# C( r3 G% ~
/* configure System module */0 d: D* a8 v* j4 V8 K
var SysMin = xdc.useModule('xdc.runtime.SysMin');
. l) ]4 f" V' `5 }0 Q  h5 i: Z, c8 ASysMin.bufSize = 0x1000;
) ]/ t8 l2 [" i/ G8 f6 b* HSysMin.flushAtExit = false;2 {! n1 N0 \: C* y% C

3 ^+ M) Y* i9 U, e7 F$ {var System = xdc.useModule('xdc.runtime.System');# H' R5 ~, H  h
System.SupportProxy = SysMin;
2 N% T; Q% T; b9 Q. w9 @  S/ E( Q9 |" [: b$ t' W* S1 r
/* configure SysBios to use the lower half of Timer 1 */$ i) J2 q+ [! _' X4 m$ v* w# p- v. `
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');" f( g5 {% i0 R
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
( i3 Z1 w6 s+ M" O4 T8 F. zTimer.timerSettings[1].master = true;
$ B- \" O. ?5 J! HTimer.defaultHalf = Timer.Half_LOWER;
: v4 g. ]8 z  ~- [- s0 eClock.timerId = 1;$ l+ z! }$ t. ~  L0 B$ {
2 O( ~% u1 M" `/ b

  n9 n% O) o+ z" W( ]/*
$ H5 u% s$ r+ ^ *  ======== Miscellaneous Configuration ========
, [" F! a1 o5 h  P. c+ {1 v+ K */
. ]1 C9 Y4 w# O* z# X: w8 k$ `1 s6 t9 F- C
/* set default diags mask */
( f9 G4 o! G' t+ _" w7 pvar Diags = xdc.useModule('xdc.runtime.Diags');/ `8 _$ J( O# [+ x1 p6 l5 U
var Defaults = xdc.useModule('xdc.runtime.Defaults');' J" b- V0 @/ @

4 {: \! I" O+ T8 \Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;8 I: |1 q5 y6 U; y
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;6 t1 \" X* [* d
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
1 E- p8 Z  q; t* a4 A7 B2 [6 _4 z0 Z1 VDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */& c/ J4 e* k- H/ L9 N9 p
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */. |3 A5 N3 w! o: T
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;3 J/ a& o& Q. N+ I5 X
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
0 s& l, Z3 e3 m6 bDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
0 r. d( u0 D/ R2 n( U2 D6 g, oDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
1 l4 K0 h; o5 B# k: nDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
' ?1 M1 q+ k% [' VDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
8 t( x' [7 v5 N5 y; s) r9 {! `! ODefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
& k4 Z& {+ a. q% F- \9 |Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;/ I: J9 B* Y( l4 _8 B
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;# @& e9 g" _' E8 P1 j- |' r$ i
4 Z. ^) ~- n5 P' I; P) ]
/* override diags mask for selected modules */
: D) s% \  e7 m9 _0 p% p: H% `- G8 Axdc.useModule('xdc.runtime.Main');
, p) Z2 l2 f* q4 p7 SDiags.setMaskMeta(; c) T  W0 z3 T3 Y/ _8 L' |
    "xdc.runtime.Main",
, A1 s& o. ~- d  M8 R1 l' h    Diags.ENTRY | Diags.EXIT | Diags.INFO,' y& ?/ L/ y3 m4 u6 T
    Diags.RUNTIME_ON' J) z0 i5 i/ E2 `$ N
);
# ^% M; a7 x) l' n- P9 M& A
& U3 r9 x' ]: g3 U' V, gvar Registry = xdc.useModule('xdc.runtime.Registry');. d+ E& g5 |; ~8 {: M2 L8 U
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;3 b$ T# k. m8 W
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
2 j1 S" k! H: F6 \0 @( K  {Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
) M4 |$ r4 F/ qRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
2 h. u+ H6 d; \
& W0 H7 T  @3 p- c# E/* create a logger instance */
6 n9 Z, b7 E7 H# D, L1 Ovar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
9 O# k$ S  `& O% Yvar loggerBufP = new LoggerBuf.Params();
/ C9 n8 p$ D- ~- D! dloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
: c5 H1 A, ^' I7 \: ]$ S9 r* mloggerBufP.bufType = LoggerBuf.BufType_FIXED;
& {+ U, X0 _8 l/ a% K2 c% e
6 y# m# F) A, P) T3 M' evar appLogger = LoggerBuf.create(loggerBufP);
$ d' L0 D# b/ _8 oappLogger.instance.name = "AppLog_Core1";4 K4 Q/ R( U# Z* M  |
Defaults.common$.logger = appLogger;4 |; T& A( O+ k( ^
Memory.defaultHeapSize = 0x8192;   
- n' g/ |, t# y6 [% Z! ?) mIdle.idleFxns[0] = "&LEDStatus";$ T! w1 N6 @6 e9 o4 f: k0 ?
Cache.initSize.l2Size = Cache.L2Size_32K;1 I1 b' z% o, N% `8 i

- M) ^8 l( ~! ?$ m5 H, d
回复 支持 反对

使用道具 举报

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 */
4 U( n6 E5 ]7 Y8 Fvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
7 [* A! T0 ?) Z' ?var heapMemParams = new HeapMem.Params();
5 [6 h1 }$ P0 X' M. v8 I* B% V/ JheapMemParams.size = 0x4000;3 n3 U  Z2 m: X
+ E0 _0 _/ D# p' |8 u
var Memory = xdc.useModule('xdc.runtime.Memory');3 ~4 I) E# w. M8 L2 Y5 ?
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
2 h( ~( Y- Q7 t+ s: f. A/ ]$ T+ m) D& r4 X$ t( {8 ~
我大约calloc  每次共计大小为5K*16bits," i$ O$ v, {5 S0 q5 i) ]
而默认配置才0x4000、需要改大。8 D2 J7 ]+ H! c) i" g3 g7 X
  ]+ C, j  t. `' b
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
4 B0 F  I1 g! u4 [* sProgram.heap = 0;# F$ @# Z) A, v
Program.argSize = 100;  /* minimum size */9 N* U4 z5 p  M+ B$ n
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-4 19:39 , Processed in 0.039987 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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