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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构7 N/ [# E# D, V& Q% e+ G, {* a# d
/ H& i* a( }5 V7 s& p$ d- |6 O
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
! ^: `! V0 R3 P3 d2 Y* o3 m6 Q* W; G8 n
其他程序段。。。。。* a* v% V* S" t( k& E. w0 k* }
" i9 v: l- o9 ?! G' C
   free(x_d);
  g( A* K# M1 [3 e, M) m& e4 g9 E4 d0 u) f! u
使用DSP侧单独调试功能,验证动态申请没有问题,
3 M5 q7 d. v2 s- g! w+ ?
8 u' ~8 A) ]% X: J* [但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
0 C6 J$ S& M4 y  E+ r- M# c: V4 G
. I6 y+ \6 O! F) ~( \, a

# j8 z) Y, z  v! L  A+ D
# d7 M/ R8 T  H9 x. l+ u7 p( H; u2 g9 V9 E4 K& ^

4 ~. s/ i; ?3 \5 Z# Z$ Q/ |
2 T% f; f$ E: [) ?
3 C# l8 e2 F( D8 k0 Z7 W
, O" f9 L; C3 e8 n5 |/ c
0 b- E7 _" y( ~  F8 ?3 o
1 c1 O( }  a* U2 b2 |7 l( @  O
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
* r5 H4 o! u7 k7 k我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
* j+ V* Z' [+ a(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
' W( z/ b1 l- F5 @. X
  G; l2 c7 N, S0 {2 |4 ^
是不是需要在DSP.CFG中进行配置
+ R$ a" D5 V! o) H, u我现在的配置为& C$ t0 G4 I3 n6 W

" E2 X: Q) x- [* N* v$ j& h/*
& Z. d0 I1 L% j2 n+ t *  ======== Operating System Configuration ========
2 j* l$ i+ ^- s$ {# v */
9 J4 o. ]5 c2 h! G# T$ }* \( u
( r# h/ h# R! T9 Q5 z9 v7 B6 E/* no rts heap */
+ o8 F8 [- i, E4 m! VProgram.heap = 0;
& }( u: [" M9 {* X+ F" dProgram.argSize = 100;  /* minimum size */
) |, ?$ L1 V+ [* {; Y& T) ~Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
* _' f; g9 R# U  s  f6 c+ M2 _8 h6 D" l% O3 a, ~* D
/* create a default heap */, C5 C, d2 B! _& S% v4 H' C
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');2 C7 h) W, P* t/ K
var heapMemParams = new HeapMem.Params();
# {: H' h% _& Z& R; u' CheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
% b4 r% L* P" Y
  \& P+ g+ T2 ]) o
var Memory = xdc.useModule('xdc.runtime.Memory');2 J, W9 f) \  h' z1 R8 \
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
/ s# p7 P6 x5 n+ u7 w2 r  `2 X3 D( \" k3 H
/* configure System module */3 S' l: w4 p1 K- I* B+ H
var SysMin = xdc.useModule('xdc.runtime.SysMin');
" ?- t7 n9 X/ kSysMin.bufSize = 0x1000;
( {5 @9 J- }& [% w: g- sSysMin.flushAtExit = false;0 j1 R( E/ [& _0 I1 e

% |5 Y. F5 _- y3 d! Ovar System = xdc.useModule('xdc.runtime.System');9 N4 |0 p0 b+ |  c6 ~1 d5 Z
System.SupportProxy = SysMin;9 p1 q! i% `+ k  w( M# E
( c0 A3 F( I' M7 p; _$ V8 @
/* configure SysBios to use the lower half of Timer 1 */& L0 x/ c  x; M2 [7 p, S' U7 w
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');6 o5 V1 C: K; `& x; ]9 C2 h
var Clock = xdc.useModule('ti.sysbios.knl.Clock');" J* q" u* `& B. t7 a9 \: q
Timer.timerSettings[1].master = true;) S; V/ H2 [' h# K" ^  A7 l
Timer.defaultHalf = Timer.Half_LOWER;2 x7 ^( z$ I, ?
Clock.timerId = 1;+ w/ e" t# s1 b$ O

+ G/ R  m7 ^- D3 ^0 D6 J, H& c5 x# _! g" t7 a7 |
/*+ H6 R+ E- E2 c7 M# ?7 M
*  ======== Miscellaneous Configuration ========
7 G( O; F. Q; {$ r4 P6 M */
  N( X. H. x5 v7 o9 E6 I2 R, V5 u% g
/* set default diags mask */9 n& h. q, U( v, s7 R
var Diags = xdc.useModule('xdc.runtime.Diags');" _$ a' n9 C) N- c
var Defaults = xdc.useModule('xdc.runtime.Defaults');
& e" E" N* E* s* f* K8 @
0 F: ?$ D7 X( w8 `8 A9 FDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
. `1 J4 i7 k. ^4 J4 ?& kDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;  f. g" t2 S+ |2 l5 G
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
2 J2 U* p; p5 V' v6 lDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */' Q) D- t8 ]( f8 }1 q+ y( {
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
5 i0 a' j2 F6 q' p& _; lDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;' \- B) Q7 l3 I- s
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
, ]3 E8 V6 d; i! q: l* `5 P! `% LDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;7 K) L7 z# z: R4 ?0 L8 r- a' Q
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;% O  q. Z' D) ]7 o
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
- C3 G' g# E& {9 ]$ h+ M; |1 UDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;- j$ S$ _: }( t, ~$ M* Z
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;8 S3 H2 k% [! p7 k( W) `
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;3 v2 {$ O8 |  n/ j& d' W: A$ r! `
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
* E% s5 {8 U& g% y; X6 a; q$ k/ \0 l- ^2 y+ v0 r8 E2 a
/* override diags mask for selected modules */
2 [7 T1 d& h8 G* n8 P. yxdc.useModule('xdc.runtime.Main');
# ?0 J4 W. m! y' H1 i) sDiags.setMaskMeta(
. u" C. q  D( n" Q7 x    "xdc.runtime.Main",3 F& N% [4 t& S4 o, s
    Diags.ENTRY | Diags.EXIT | Diags.INFO,% ^8 I7 S- s( T- ^, T% n
    Diags.RUNTIME_ON
/ e6 O$ v+ C: O: K# ~) });
! ]: O9 F3 H  w. D2 l1 G: m, K
+ I0 h  t& j, H; avar Registry = xdc.useModule('xdc.runtime.Registry');
6 I: I% Y5 }) o( n/ kRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
; K, Y1 h$ O9 I9 y$ W* k* A4 n1 GRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;4 X9 k6 S7 T9 m3 `
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
0 ?9 s6 w, z% V  d; MRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;# q1 z/ z9 E2 ^" b

* l* B  I3 p) D* P: T+ }/* create a logger instance */
# s/ {& F8 y$ c9 Pvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');& w# O  m! T$ Q$ z9 \1 O5 w
var loggerBufP = new LoggerBuf.Params();
1 t5 T, j$ {6 h* yloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
7 `5 H" I. @" R# I3 wloggerBufP.bufType = LoggerBuf.BufType_FIXED;9 s( q, K  o. z8 O) i1 m- z
! Q) X0 p8 k3 G0 F! f
var appLogger = LoggerBuf.create(loggerBufP);
8 ]2 t1 k+ O% m/ o" J. |7 y! FappLogger.instance.name = "AppLog_Core1";. @! p6 Y, R9 q, F" |6 `2 u8 P! [
Defaults.common$.logger = appLogger;
/ u2 O* s* |. j+ XMemory.defaultHeapSize = 0x8192;    # Z0 s+ m5 v& P3 M
Idle.idleFxns[0] = "&LEDStatus";1 E. I1 P- q! {, H9 s
Cache.initSize.l2Size = Cache.L2Size_32K;
2 T0 C! ]' {8 _/ J( b8 \. B' N) X  m
回复 支持 反对

使用道具 举报

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 */
1 C: m' M* _8 W9 T$ R- G; uvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');5 K  G7 C  F2 g% l
var heapMemParams = new HeapMem.Params();
0 F' O, H$ \7 a3 ]2 K  }heapMemParams.size = 0x4000;
, q! `, A) k4 E$ N6 w5 l; G( }: ^( e9 e3 p* L+ z4 v
var Memory = xdc.useModule('xdc.runtime.Memory');' _) O% q$ x5 K3 E' C" ?+ p; M
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);; J4 B3 R2 a. S' S# K1 f
0 y1 }# {/ b# _9 N4 r9 p
我大约calloc  每次共计大小为5K*16bits,4 c5 H# N! N' j2 J& _8 [3 W2 ^5 P
而默认配置才0x4000、需要改大。+ ^) N+ U6 {8 F' E  R' ?4 p
$ X5 n1 u( Z4 e% m- \2 l
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
! T, Z+ E1 w6 s4 |* t$ {Program.heap = 0;' G0 L  T! a) B
Program.argSize = 100;  /* minimum size */6 t" O7 j& c% s) S; e
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-16 05:59 , Processed in 0.053064 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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