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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构* s+ s/ s$ |5 E0 u$ g/ v( V

) a2 x+ y) [2 e! z    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256: H( q( o7 `( z% v
/ ?# J8 j5 \( m
其他程序段。。。。。
) M: `0 J7 x$ p$ A " x5 p! R  Z, e/ S3 `6 ]" P
   free(x_d);
+ W% _- l1 k) z& s+ }6 R# q0 X" B
使用DSP侧单独调试功能,验证动态申请没有问题,
7 ^5 n# d( w$ j- K- s! D) p# u. j* T8 \  ?6 J6 H+ m: J" G
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
1 U3 R+ b4 J7 r: X& ~  o" X$ h

  V" g$ v! G$ }: k) J
& [0 K5 }7 h% l
5 H8 O  M+ o# B. |& @
  N9 J. t& Q& }5 n% A
2 c$ K( {( E* Q/ {$ N* b  Y
4 `2 Q5 O6 _* O1 X
0 N6 Y! L; K+ K4 e8 p6 E  a6 v0 V/ U' H- g# @3 @* H
9 a# `- m# P- I4 Q

1 X6 ]: ?$ b4 G, k$ O& \
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明, s. ^# w4 [  Y. W3 }8 R2 v
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
+ f1 G# {- I# ?0 J, i(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
; h) R! u1 Z8 d9 Y6 ?7 u  i0 N& U
3 `) o+ |3 ^$ T7 R2 y$ g
是不是需要在DSP.CFG中进行配置  v( J" F0 u' r. C9 D
我现在的配置为
: e/ q  |5 x) O; b- e% i
4 U' X( T2 u2 \+ k+ l/*
. x1 D3 U0 X+ q, m* L *  ======== Operating System Configuration ========- |- F+ o- l- l3 q2 |: F( S
*/9 |! r6 ~: O' }& O& m$ P, b
# P4 ^0 l+ u+ W* U9 F9 T( b
/* no rts heap */
+ B, D& L* a1 DProgram.heap = 0;
, ~' S" ~' k- Y8 bProgram.argSize = 100;  /* minimum size */! p$ t( W# E+ |
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
3 m: o# k5 v% B5 T2 j% I7 y$ r0 z) N( S& M/ L6 ]
/* create a default heap */7 J6 f$ y3 _2 a' D8 \
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
: ?6 k1 A9 i, \; z* T- }: dvar heapMemParams = new HeapMem.Params();
" G7 s; O9 ~) g% J% MheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
, g. l" _( W! x! t+ X) J- v) Z8 ?2 A# a. S6 G# e' d
var Memory = xdc.useModule('xdc.runtime.Memory');9 K$ Z8 c& W" t9 x' s
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
, a* `! Z* X2 P6 I* z$ c
: ]9 l3 J8 q1 o: _/* configure System module */
* e# D6 A, Q" {' w$ c0 dvar SysMin = xdc.useModule('xdc.runtime.SysMin');
! C7 ~4 R- f: V3 W1 F( g  ~  }SysMin.bufSize = 0x1000;
2 X( T+ ?' T0 f% K8 @4 U' _SysMin.flushAtExit = false;
# S: K8 i$ r% G. c& a, n* q: X
5 Q9 T9 G% |7 X& W+ o; ovar System = xdc.useModule('xdc.runtime.System');
9 }* w# X5 v8 S$ L6 ^System.SupportProxy = SysMin;( |. K4 h- b" a, w( l, {( O
1 ?4 s# _; U$ [: |1 V
/* configure SysBios to use the lower half of Timer 1 */
% l2 G* {( E2 H, d8 `var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
; l" o! r6 ~  N1 v; avar Clock = xdc.useModule('ti.sysbios.knl.Clock');% y3 e/ d( b8 a3 @& o& ]
Timer.timerSettings[1].master = true;6 N8 b" E8 P- A5 m+ L
Timer.defaultHalf = Timer.Half_LOWER;
7 i# ^6 u( ~( y5 p$ eClock.timerId = 1;9 N7 }5 n8 y: J% g) Y
" R4 Q( y  L5 [' K6 q! g
+ l5 j  r* @) ^  l' ^
/*3 m+ Q: j( J% v1 j6 N- P7 N
*  ======== Miscellaneous Configuration ========
9 C6 A: w6 j* ?* n */: _' P; B4 q2 `1 p7 l! C/ |

4 l3 x9 J$ E* X- o4 u/* set default diags mask */
9 m( W& P& H4 a& I( p; L/ k1 Fvar Diags = xdc.useModule('xdc.runtime.Diags');
/ A. C& s5 o; p6 fvar Defaults = xdc.useModule('xdc.runtime.Defaults');+ p  O7 q' c- x2 Q- _7 C/ c2 v

* A/ B% }2 Z: E4 p, [& n2 [Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
- |) ^, u; Y' t% \7 uDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;/ ]$ e5 K  g$ p8 F0 M  f# Q0 k
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;. g% `( _$ o* Z! @, z' |5 C6 g
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts *// Z8 Q* o6 `: s$ w; p4 |
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
: o2 Z9 {. y4 G1 T7 L9 fDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;" j, ~; s( u: n# ~, T: t
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;! q  Q( c$ S+ `. u9 i2 \' Q
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;2 v  c/ T7 M" D) y
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;# t, I1 A6 g$ v- h! ?
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
8 G" o' H1 A8 X! FDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;, Q# _  o+ t1 I- U: Z& N: P
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
8 c& i7 G0 S$ J! F% R. o  J) A( B3 |" zDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;* ^3 L1 Q4 G0 f& ~( J, z) t
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
1 g1 y  @$ v  u2 N* Z
2 K! x/ L8 O3 U4 U' J5 k/* override diags mask for selected modules */
5 _! z7 w7 Q# jxdc.useModule('xdc.runtime.Main');4 W5 e$ N* @$ D0 C* `6 K2 Y; B
Diags.setMaskMeta(
- _8 E+ V1 N6 j; G7 \- K# F/ P    "xdc.runtime.Main",) o4 |1 k+ y( N! w# H3 l
    Diags.ENTRY | Diags.EXIT | Diags.INFO,8 t: f  E8 A+ R) D* A6 d
    Diags.RUNTIME_ON
( G: s* m& O- T3 N' o6 @3 S6 Y6 l, U);
+ F% ~5 K9 F7 K& ~1 ^/ H) n3 _1 {, f) z+ s6 \/ y
var Registry = xdc.useModule('xdc.runtime.Registry');* w: [5 p1 y' L1 h
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;, u- N5 b/ S+ n7 ]  Y; X
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;4 G( h8 I# r+ L) x+ t3 a) Z
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;& k  J8 ^- F9 g! X, X
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
+ _; r9 r0 d  E1 j$ l$ R6 r' a* d' z. `' A
/* create a logger instance */" H5 k. m2 D8 O9 A
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
  n3 b1 a; u9 wvar loggerBufP = new LoggerBuf.Params();
  t0 I6 ^& M; l( bloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */' l6 A# h# K+ i! P
loggerBufP.bufType = LoggerBuf.BufType_FIXED;" `# e7 p! x" u

$ U$ b5 ]$ y. x% Pvar appLogger = LoggerBuf.create(loggerBufP);
+ U# A; H" ?% {  F# K; ]9 FappLogger.instance.name = "AppLog_Core1";
5 L; Z5 @* W  d. UDefaults.common$.logger = appLogger;; H. {5 m2 g$ v  p5 Y) V
Memory.defaultHeapSize = 0x8192;    0 x8 p  S6 q' k3 c( |& j+ t, R6 A
Idle.idleFxns[0] = "&LEDStatus";/ N6 m3 `; o2 V. }
Cache.initSize.l2Size = Cache.L2Size_32K;
. m" R2 T4 k2 u0 i& j7 H4 |: t  ?! X  _" I7 ?6 O
回复 支持 反对

使用道具 举报

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 */
( W' b4 I7 a+ {, K7 zvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');- X7 ^4 y/ D# o0 _
var heapMemParams = new HeapMem.Params();4 [. d4 c2 O: _5 S- I4 @5 I
heapMemParams.size = 0x4000;# C) x/ o) o. h" S* ~8 s/ d* F. r  |

- P' R& [" X2 O, `var Memory = xdc.useModule('xdc.runtime.Memory');1 B! W: N; H6 I  }# t
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
5 Z$ m# ?9 S! m. N
2 h% _4 m) i" |我大约calloc  每次共计大小为5K*16bits,5 J7 l; u' i8 e4 q4 |
而默认配置才0x4000、需要改大。
7 W# ]7 S) @5 L/ V6 X
9 s3 p; N+ O" N  ?2 o
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */' q5 l  |, ^6 ?
Program.heap = 0;
  f7 [* U4 r) Y$ W. W+ u/ J7 ZProgram.argSize = 100;  /* minimum size */
9 \) L, K2 Z2 n: ]! \  qProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-29 02:22 , Processed in 0.043104 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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