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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

6 I" o0 y; f! v    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
. f# U; x$ m% h+ c9 z6 x! l+ D5 g5 x  {/ ]  K" W& O
其他程序段。。。。。7 [1 K, Q2 R8 q; f5 C! |
6 @- q9 ^% K( P3 ^/ p+ _: `: w+ b
   free(x_d);, j5 \5 G* j  b2 v
1 P0 o- O) j; l2 f; Y9 K
使用DSP侧单独调试功能,验证动态申请没有问题,) R" f) S  Q. t( Y* L
# ?6 q; ?/ B; j) q
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
/ ^/ L- F; Y) G/ O7 y4 ]
2 ^( H: h- J4 R( r

3 {2 M: ]  }! B4 X6 Y  }% H  y$ `+ [, b
6 a8 E& A. U0 e9 B  m
: I  V1 }0 u  P4 N3 q5 I

6 Y5 s5 G- A* l( t* e& U2 V* a- @- z& W3 I* R) \7 g5 N2 Q$ A$ t

* S" U( ~9 J9 j3 O
/ X9 t: n: G- O( i* x* e% ~
$ @: U" S# [: h" ^$ v
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明6 F8 l( v$ w6 x& l5 `  Y$ T
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
9 c5 h1 @0 J  q1 q$ H  Q9 N% l(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
9 w3 G2 E0 {% ]! h5 d# Q& o
+ U6 s+ X3 @+ o
是不是需要在DSP.CFG中进行配置- q3 h9 f5 G$ I& o( m
我现在的配置为
* \6 J: T, M6 t9 E% e! |& E9 L8 H6 c4 S
/*
; s, }6 Q$ S+ z  \ *  ======== Operating System Configuration ========
! c6 E+ W1 ]& L */
4 c6 Y9 q5 \7 v" s) @3 i
% U7 r4 E$ _6 d9 R9 l/* no rts heap */
& A$ p4 d8 B) c& n& VProgram.heap = 0;
* w2 k" Z$ U. |/ P" s3 MProgram.argSize = 100;  /* minimum size */- \8 K* A# u3 V9 @- l# N. |3 G. B
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
% G2 N+ l7 l- I% z6 D4 u4 q$ d! c2 u3 f
/* create a default heap */
$ b- O5 f; q* X' ?var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
$ \# G) F( C9 Z; [6 {  W" Z* wvar heapMemParams = new HeapMem.Params();
" |$ F0 I+ ]+ O7 D  o9 mheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大6 W& Q# r- n# _" ~1 |( F

$ ?! |. U7 v$ k$ w
var Memory = xdc.useModule('xdc.runtime.Memory');
% z4 e# v! S8 I; {2 K4 X! v4 KMemory.defaultHeapInstance = HeapMem.create(heapMemParams);" |" I7 D9 {# j' O1 ^8 a
, I* X+ t& U: p, z
/* configure System module */
' A( i( d' v  f6 ?3 wvar SysMin = xdc.useModule('xdc.runtime.SysMin');
/ R! f5 K- |$ q& @SysMin.bufSize = 0x1000;% n2 y! y* e( m- ?8 V2 v. y: z
SysMin.flushAtExit = false;! T( E  u7 V* a' I( v- X

) u2 [! q, j; G  W' [) cvar System = xdc.useModule('xdc.runtime.System');) E+ z  X/ `2 {+ g8 j! Q6 Z9 i& F
System.SupportProxy = SysMin;. B& K- o- J* m  K" e0 n, |
& w$ T4 D) A; ?) S$ r
/* configure SysBios to use the lower half of Timer 1 */8 L, F2 j3 R6 }6 C! i: G
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
* Q( p9 _$ m  X1 F" Z* [, Mvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
& s8 r0 r. e+ X2 D% ^' V5 z" }Timer.timerSettings[1].master = true;& R+ X5 W7 E  u" H  x, [) s/ k7 s1 j
Timer.defaultHalf = Timer.Half_LOWER;# B2 R) l$ Q# m" J6 e
Clock.timerId = 1;
- m5 }( F$ B' L" v7 P' d5 h( t! u- [& q1 z: j1 ?  [  f8 V; S. _
1 m# |3 w% j5 D; E
/*
. J( I! @( n9 | *  ======== Miscellaneous Configuration ========3 k/ o; P  C, s: h# \
*/( B. i8 c- ~% ]! U  \2 F1 D

" {5 q$ ~- [/ N/* set default diags mask */% W5 H2 P% f% e" W1 `- ?0 M
var Diags = xdc.useModule('xdc.runtime.Diags');8 ~- J$ B% b# H0 B5 }2 x! Q" T
var Defaults = xdc.useModule('xdc.runtime.Defaults');2 E: A; n( R$ D; E" F0 e: r

+ N6 q# N* x# T/ lDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;+ R& I( @  q2 F0 i4 D
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
+ f, r- m) q7 |' ]) b+ ]1 o' |Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
! ~: {& P# o3 G6 ~Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */% P+ s  `( C0 N" D+ a' t7 h
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
3 w+ B( \  D! _+ jDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;! T7 |: ]3 v; C8 A# X7 P  @0 p
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;5 M8 @+ S* {& S$ g: O
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;3 ~' H" V$ e3 Q3 G! N6 }- F& G
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;% f! u) Q. {" b6 G4 s) s0 E
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
. U- ^( d4 C$ B4 u2 }Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
1 v' l* P1 F/ I1 r" l9 cDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;( t# o  W* I& b8 G
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
" c  p* }, k8 ~2 W4 A/ KDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
" q" b+ d+ l& h' g9 M* C2 _  O6 j/ v; y: R
/* override diags mask for selected modules */
0 Z) |6 C( y  c6 W5 Vxdc.useModule('xdc.runtime.Main');
8 B7 z" F- L- W$ y; R( JDiags.setMaskMeta(
0 V9 c1 o7 h# `+ f8 C9 }( R    "xdc.runtime.Main",$ L6 y+ |) v! W/ t9 x% ^
    Diags.ENTRY | Diags.EXIT | Diags.INFO,( P5 s4 K( U4 j  Y1 g
    Diags.RUNTIME_ON* O  R- `; a. J
);, p$ g5 R- O3 y- o; k9 n
0 P# R5 Q! l4 b' @. d" T
var Registry = xdc.useModule('xdc.runtime.Registry');
; @. z6 D8 {* wRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;) W" E6 J6 [) E' }8 y3 V
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
- ^; R3 \- {7 O7 q* JRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
9 Z8 q7 A2 u" D/ ?Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
2 \# X0 |* z# S! s/ m7 ?# h" P& N+ M
/* create a logger instance */, @4 F3 v. k2 D# f6 m4 W& v
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
" C- o9 ?" Q2 n( r  @; ~7 dvar loggerBufP = new LoggerBuf.Params();
( ^4 C$ r* X/ U+ U3 J' j, c) PloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */) m3 P: a. z1 u/ R& ~; g/ C% }
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
, g7 F- N" V- }! ^1 a
6 U, ?) O4 p: u; V6 B6 dvar appLogger = LoggerBuf.create(loggerBufP);
( q3 ^% I3 Y+ ~6 Q+ BappLogger.instance.name = "AppLog_Core1";+ C8 J' @" y, w* d- {* T9 i
Defaults.common$.logger = appLogger;
# a' h% D. R1 m3 tMemory.defaultHeapSize = 0x8192;   
3 S) E! ]( [) T+ e8 UIdle.idleFxns[0] = "&LEDStatus";4 d* Y- r3 C' k' q
Cache.initSize.l2Size = Cache.L2Size_32K;  u" S; v( H! l. |: p6 A
4 N' H8 E3 Z7 Z# 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 */
. L! X% P8 [* {; Y: D8 ovar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
$ b% b5 u# S6 M8 ^" ]var heapMemParams = new HeapMem.Params();! S. \$ h- H0 Q0 s# o3 L! H
heapMemParams.size = 0x4000;
, D8 ]# P5 C' r' n( I3 n, l6 e! P
var Memory = xdc.useModule('xdc.runtime.Memory');
% q! o# h% L4 R( e( Y( ~5 @Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
* s2 K& B5 u. i, f
4 L& g1 x% ~' @, \/ F& F+ c我大约calloc  每次共计大小为5K*16bits,) b5 S  U; Y% m: q. {0 L- g
而默认配置才0x4000、需要改大。$ t% l/ m6 R4 I
! }( y7 H! C2 S% ^9 B; o$ d6 o; Z
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */2 [3 Q, s3 r# O9 G$ E
Program.heap = 0;  G$ w$ s/ Z9 L  X$ y9 w1 \
Program.argSize = 100;  /* minimum size */
7 k: J; i) Y1 G1 T# JProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-15 05:44 , Processed in 0.043509 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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