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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
* N5 ~( M* M( x+ [9 _5 g" y; X9 u9 p0 D0 ?
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
  w) s4 U5 ]7 t$ R1 T1 w7 Y. I  g" o  a% C: Y. m1 e
其他程序段。。。。。4 r/ K  e& f+ Y: Z) L/ j- }
3 P1 ]" z/ {9 K' k, j# K
   free(x_d);  O" L5 l4 x4 [0 n' Z+ _% d
2 B* Q* M/ v: p
使用DSP侧单独调试功能,验证动态申请没有问题,
! i& r, q( b/ \# F2 r$ l3 J2 V" F
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。, @4 r& \) g' G+ I' n. ^$ u8 Z$ X

$ N/ t1 B7 x) J# ^  \3 s- @# B0 w/ V5 l
8 ]' l3 P/ K: B5 n

* J+ J; q* w# _5 {
- S. Z4 s$ d3 r& H4 `: v3 r- z" D; m. a+ n2 _$ A* d

8 Y" Q# y* N* V: f& P& _
2 F9 I% k2 Z4 R0 L) ]6 J2 F2 G% h3 H
; @) w, F: y8 S' Z# v* A
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明+ R( r* v% K3 G5 a3 T
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下8 D# ~) X+ ~8 H1 ?# `* i
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
+ e. T4 ~7 `2 L' I/ H' f6 @

+ T+ n' L- `0 h0 N是不是需要在DSP.CFG中进行配置' ]8 P1 B5 `, S& q+ {% z
我现在的配置为
& I* {' F) U3 A( k/ `* }; s8 L7 f. g1 A) [
/*" H2 g. b5 ^/ }
*  ======== Operating System Configuration ========7 ~$ I6 J5 W  M+ g& Z! [' Q
*/
5 o. m. N* v  W4 j0 g0 k
6 c4 ?& ~5 V1 T7 m' Q/* no rts heap */
5 [% o* s4 O0 `Program.heap = 0;
! h$ Q8 _: e5 p: ^, jProgram.argSize = 100;  /* minimum size */" q& ~# N! m2 z9 V
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大' E. p6 b# U0 ]% b1 T
0 i( r9 a' E% c: g
/* create a default heap */
/ D. U$ [. k) X8 ]& t2 X8 pvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');/ N1 d/ f; M/ j$ _/ q) ]
var heapMemParams = new HeapMem.Params();
5 X8 y$ f9 i9 u. uheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
; X- i2 T! l# ]6 j, s) I4 C% [; }  }  N6 l
var Memory = xdc.useModule('xdc.runtime.Memory');- g6 d: w) I, m7 {5 z
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
1 k! A7 ~" G3 O9 }! M9 x9 F% ]0 F; V: C5 s& Z
/* configure System module */- Q- }/ z+ q# \
var SysMin = xdc.useModule('xdc.runtime.SysMin');
) S8 h6 J  `9 N4 v# l2 gSysMin.bufSize = 0x1000;
  [+ ?) k# a3 }  c- r/ RSysMin.flushAtExit = false;
+ l/ N6 T0 p( R: E
2 S7 d5 g" i- Bvar System = xdc.useModule('xdc.runtime.System');
5 u/ E$ t1 i: F# B9 m* B0 k0 K) ZSystem.SupportProxy = SysMin;
  v8 e- J# B( N8 Y7 ~3 f( g; X! f& D5 J/ l% F/ _* s  e
/* configure SysBios to use the lower half of Timer 1 */, T, M" n2 A! J) `- {
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
5 B& u; ^8 v$ z/ n7 X, \8 B& a7 ?var Clock = xdc.useModule('ti.sysbios.knl.Clock');
" m$ n6 O+ I9 L1 T2 uTimer.timerSettings[1].master = true;
! Q! ]# e$ J' r# XTimer.defaultHalf = Timer.Half_LOWER;& u) i3 p+ Q- O" t# e0 h* v- R
Clock.timerId = 1;
8 l( M0 M, ]6 m9 r5 W% F9 \0 F+ _
3 ?2 e+ v/ A1 r. P: P4 a+ D; K! T4 V* p5 y% @
/*
8 l7 _! ~# j0 @) y. r6 t *  ======== Miscellaneous Configuration ========1 W5 v1 }% L: m* ~2 e
*/
+ x# S9 Y" R6 b3 j3 Z; F0 o8 R4 N" |5 f2 @, |/ i4 l+ A9 U
/* set default diags mask */
! O; Q. e3 s, f" B5 F) @4 rvar Diags = xdc.useModule('xdc.runtime.Diags');
8 `' D% i' C. u. r6 V  ^; E! A! w3 Lvar Defaults = xdc.useModule('xdc.runtime.Defaults');
; w7 d  g2 j- |/ E5 P/ R) H( q) v4 S9 F9 e  L' Q- Y: C8 j
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;8 I% y; i' d& a9 t) X$ A
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
& Q. n5 a# e; N$ oDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;' d$ N( \) V' K: x! z. P
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
# W) e0 n4 t8 y/ A* W1 e; ^8 H3 w& lDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
7 ^: S4 w5 v8 u) E, m* `7 iDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;  J% r" q& ^9 K) I6 M
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;: l7 l" _; K! S9 G, Y2 `
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
& T# q, E; K3 O% v& j- _) EDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
/ V: l% B6 ?4 K* R6 e) S$ J2 b+ Z' TDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
; u8 G3 F' [8 I! D, LDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
% k% Z) \" c, \! r0 ^: E% VDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
4 j- J0 @5 i$ A3 o/ aDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;( Q3 l% l' c1 I  |* g% W
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;' j7 \/ y( W  [- J  ^9 m- A

4 z+ U/ q9 |( |" R. z9 f5 e4 D/* override diags mask for selected modules */
4 B% r7 F: f$ }) q( j, q& uxdc.useModule('xdc.runtime.Main');' W' z% b2 p4 a- @
Diags.setMaskMeta(3 R! e5 k- k/ d5 V! e. V
    "xdc.runtime.Main",3 j3 d! U2 h7 b( h2 k  R) d: S
    Diags.ENTRY | Diags.EXIT | Diags.INFO," |. x9 V0 F) {+ b7 A
    Diags.RUNTIME_ON
2 k( M0 v# J; V$ H);9 i* X0 s5 ~$ S* |% ^
7 D3 q( d3 m* a" u' O7 B8 g
var Registry = xdc.useModule('xdc.runtime.Registry');$ ]) P" ^; v6 ~* b+ D
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;0 f# X2 y0 o. u: q- N/ ?, M
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
7 @( O: }3 Z6 P' x6 }/ DRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;, I, s3 ?% ]  @* \. i
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
- p1 c4 I9 D6 E7 @; i0 {( ]* V& O" b" B( E% N7 N) \3 j
/* create a logger instance */
1 B7 v: y4 ?: l! p& mvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');$ I: g  r+ K0 q! I, C
var loggerBufP = new LoggerBuf.Params();
5 P% t: P8 s; b8 K5 b7 o! FloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
( g; u- K& V& ], H; c: IloggerBufP.bufType = LoggerBuf.BufType_FIXED;/ I7 T" c+ t8 O- P1 T2 [+ S

& z( q' H# y- `" D0 S5 Evar appLogger = LoggerBuf.create(loggerBufP);
# [9 d& _1 V* [1 U7 h" [appLogger.instance.name = "AppLog_Core1";
$ |% J4 ]8 i! MDefaults.common$.logger = appLogger;: X& R" H/ }6 M7 y2 P2 n" I8 e
Memory.defaultHeapSize = 0x8192;    & c- x3 ]  R. c4 D9 n
Idle.idleFxns[0] = "&LEDStatus";
) P5 h- C0 k# Y2 M. s3 ACache.initSize.l2Size = Cache.L2Size_32K;
) n, {$ s+ E/ l+ E7 w/ ?- ^
/ A1 x0 y2 ^0 @) J9 ]/ e0 J
回复 支持 反对

使用道具 举报

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 */
0 [; t% e' l- g0 dvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
2 h( L# Z6 _7 ^3 z3 Bvar heapMemParams = new HeapMem.Params();
% X0 u0 n' K  v4 y& TheapMemParams.size = 0x4000;2 d. h% A9 g$ e( F) u8 w3 `

- |$ u1 v' Q; y" X+ H% Wvar Memory = xdc.useModule('xdc.runtime.Memory');% _9 K: X- a" R
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
. m0 b2 L2 C* x9 T" p: _% d* V2 ~: |0 v9 ~9 l  V+ j: T8 r' o
我大约calloc  每次共计大小为5K*16bits," s1 }, P5 b% Y2 N4 ~2 t
而默认配置才0x4000、需要改大。2 s! l3 q' M  {3 K  g+ c2 N& p. o
( k& f9 U( h! |$ c) H
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
) y1 u/ O& P, L7 C* D) aProgram.heap = 0;
2 ~  @8 P2 G9 G6 K# XProgram.argSize = 100;  /* minimum size */
% j  _2 g& ^& c& S3 ]" U: IProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-20 06:17 , Processed in 0.041027 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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