关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构! R. `; L) m+ j" k
! G- ~6 Z/ R3 @1 @
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256' S6 A( _; c3 j
# ?" t" Y. ^( d! ^3 B+ Y; g, o
其他程序段。。。。。
7 J* d5 n. Z' _
8 p5 R# Y( C. B/ X+ z( m   free(x_d);
6 W/ l7 O* T5 K( R& Q* v  @" S' P3 ^5 t% |; J3 C  F2 E
使用DSP侧单独调试功能,验证动态申请没有问题,
( V4 _* i- _$ [! @: c! t$ `* M! R' u' x5 ?
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
/ J8 _" y$ s# L- o( F) M1 A  i
& o: ~  M& b  T% R! g- g
$ k8 h$ _7 k: |2 u+ j' m6 F3 {8 s! e
' `! j( ]6 x8 ]0 X+ @
* U$ B/ p* _9 y9 v+ M

1 x' w+ E, i& F' N# c
  U8 i# Y) x0 Y4 U; p0 _2 P, k  v" H* c+ A4 I8 ~9 ^+ }
2 c8 s$ m- [/ B5 n

/ j% x9 E8 V% z& M% F  _, R0 j: T1 E$ g
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
1 I+ q; q( H4 u! Y; k# ]我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
( @2 \  w- `: |, ~) E(不过疑惑的是,为何单独DSP仿真就没有问题呢?)& S" H/ B& m* J' a2 ]$ a1 v' k
) s) R( _, d; r+ U
是不是需要在DSP.CFG中进行配置! l& @- F. _; _4 B, e; Z6 S, g9 [) c
我现在的配置为
8 _! q1 r$ i8 |* u/ c* C& Q( L; f% |' r8 s, w
/*
/ d3 Z. b) P0 T0 B1 v *  ======== Operating System Configuration ========! \8 C6 u6 R  E7 M4 E/ j
*/* g' a1 \1 i' F0 ~7 H9 N

7 y% L, F: L+ @4 q8 K/* no rts heap */6 f) U  h6 P* h! |
Program.heap = 0;5 [/ B5 z* n! ]2 I& u
Program.argSize = 100;  /* minimum size */* b& v& u- ]# f. {3 c2 t' }
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大' h% \$ ^. ~6 p+ |2 Q0 x
% L% T; Y/ U& ?
/* create a default heap *// y# Z, d* j( U
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');3 ^, m/ ?  i& I; F& M: A) s4 n
var heapMemParams = new HeapMem.Params();
$ z( N/ M* S1 d, X# z; E  z) hheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
5 Z. c) m, `3 y7 {# H; {$ `0 }2 w$ D6 r
var Memory = xdc.useModule('xdc.runtime.Memory');* j1 m% H7 M% K' \
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
2 ]0 V! X6 _: Y, n0 z9 k2 s
/ q; _3 @3 {5 ?/* configure System module */
/ V' Y1 [/ b- B- Rvar SysMin = xdc.useModule('xdc.runtime.SysMin');1 j8 p) p: v2 P! n, V1 t" b3 c" ]2 V. d
SysMin.bufSize = 0x1000;: g1 R; `$ v$ V' J
SysMin.flushAtExit = false;: `4 w, {9 R. d, f, r: n& z
6 v! v2 r& {; n9 _8 X& Y  x
var System = xdc.useModule('xdc.runtime.System');
7 A  S, n" b9 PSystem.SupportProxy = SysMin;0 I7 h6 V  Z3 F' J; t: d
0 k3 p- Y1 W! T9 L8 T6 n" `
/* configure SysBios to use the lower half of Timer 1 */
5 P) k7 D9 Y) k7 `6 pvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');0 H; d7 E+ O( W% x
var Clock = xdc.useModule('ti.sysbios.knl.Clock');) E4 D1 h$ O( E2 z
Timer.timerSettings[1].master = true;
$ g# D+ b7 s7 [! \0 DTimer.defaultHalf = Timer.Half_LOWER;
) Z& w+ S5 N: A4 B, B3 VClock.timerId = 1;
* w& U7 l8 c6 i) b! t$ I1 ^
: F. J' x% b2 O0 A  r+ t) P; |% [* V# ?( o( ^" V5 |3 @5 k( l+ A
/*5 _" g9 V5 @9 V( X
*  ======== Miscellaneous Configuration ========
! U: F9 f' }1 T8 e; s0 Y6 y */- f* j6 M5 l6 _
% o3 S$ x+ q  l3 _1 R- F8 x
/* set default diags mask */* b) U) x' y# p3 b+ A8 W
var Diags = xdc.useModule('xdc.runtime.Diags');" W7 I  ~7 f3 x5 Y
var Defaults = xdc.useModule('xdc.runtime.Defaults');4 v0 @+ b2 S" t2 y1 ?: N
5 h4 h4 @' G* u1 Q1 i
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
5 k2 j/ _2 T+ t" \6 EDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
7 e* {, S" P0 y# Q% _' I! JDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;$ A& p' x$ t; G" f+ O0 Y, }' x
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
6 z, g) o$ t, I' Q5 vDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */$ t+ a$ P5 l' c: F* Z
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
2 h6 G2 m: v4 V% mDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
: J! ~. V8 H  F1 `9 J/ d, G* TDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;, b. T7 Y' I0 ~" I3 Y
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;; v) x7 h0 p4 t0 ?! m, u
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;8 Q0 u  Q5 H0 d& @! X& ]
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
2 a/ B& z* J( N- b5 m( FDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
3 e& |/ @8 _: d  gDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;2 F! F6 }4 v( S  W5 J9 H
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
4 ^* t$ N$ n1 ~3 K
: g! W- f0 h8 m& O! z, n0 s/* override diags mask for selected modules */
* h; o9 H# Z" |/ V& q: G! h/ axdc.useModule('xdc.runtime.Main');3 E. F5 T( K1 f5 J$ h
Diags.setMaskMeta(3 D, f6 @; h' K  {( ^
    "xdc.runtime.Main",
' s& F# F9 h, [    Diags.ENTRY | Diags.EXIT | Diags.INFO,* p" f  m8 B7 x5 v/ F5 h% @0 T4 ?
    Diags.RUNTIME_ON/ {5 w7 g& v$ T' n. w/ m7 e( L
);
7 e8 P2 v0 `6 \' M% h, o/ t
3 O, e( n; k. _var Registry = xdc.useModule('xdc.runtime.Registry');
/ Q: J5 ]) u* J6 ?4 F# ^Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
' e) N! b& t( y$ P5 LRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;1 W- H* @) X  c' D6 n" u" R
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;8 D; O' c& ~; J
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;5 D1 E& o( F7 C+ t
5 q0 Y( n5 ^+ M, ]
/* create a logger instance */
  H% R0 [2 r8 f' Z% g8 j" B5 K, N2 Ivar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');% k; H7 a' o9 {, K- b
var loggerBufP = new LoggerBuf.Params();
% N2 S8 {' m; d  b- KloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */8 S% K8 p  W# `# V. \
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
9 J/ B  D4 K& p# y- [* A, `
* f/ U' {- y% n+ A6 zvar appLogger = LoggerBuf.create(loggerBufP);6 {4 _" X' [7 y) O' x
appLogger.instance.name = "AppLog_Core1";! T; a; r* X% C; o  ]( z1 r7 F
Defaults.common$.logger = appLogger;8 K$ ]+ Q; [  e# _9 w
Memory.defaultHeapSize = 0x8192;   
- K$ k4 b  e2 K" g: d. ?" |Idle.idleFxns[0] = "&LEDStatus";0 M: D5 b: j7 j7 v0 _) L5 E
Cache.initSize.l2Size = Cache.L2Size_32K;
. S7 \  ]9 L$ j3 v' L3 I" ~* U' g. J+ {% r0 Y; \: C4 y3 K7 P. C
回复 支持 反对

使用道具 举报

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 */
' K" u& y) n9 Y) K5 _var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
. r/ i# O' W8 w4 \6 Ivar heapMemParams = new HeapMem.Params();2 }/ ~- U1 g' ]  M( |
heapMemParams.size = 0x4000;
. _& x  }' l. X- ?- I1 I6 ?- {
. V/ a: q- j( c$ m* z2 Z  @+ T, s$ U# evar Memory = xdc.useModule('xdc.runtime.Memory');
" s( [' p9 v: K4 V! ZMemory.defaultHeapInstance = HeapMem.create(heapMemParams);7 D. s+ a* c0 A) K$ ^" J
* v9 X+ q+ q3 w' u, A% F
我大约calloc  每次共计大小为5K*16bits,
5 B, _3 g; R7 n1 M而默认配置才0x4000、需要改大。
( s  P" r3 d4 o; N4 `5 h& ]' z- h+ M* g! w0 {& h" v1 s
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
, d- O; i* P7 M$ t) ?Program.heap = 0;- O+ k. v. O7 {% }% q' ~
Program.argSize = 100;  /* minimum size */, `8 Q; d7 T- l4 H, z% ]
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-5 18:25 , Processed in 0.046228 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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