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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
2 m! ^' P# P# X4 i2 [( J. m# F9 U6 c6 Z+ a
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
+ A" l  P& Z8 w" {% M5 k
+ e- S( R- J* E2 g2 T0 J; k其他程序段。。。。。
: S# ~9 ~2 {* j7 C2 }$ l / n$ K! c# n6 l9 R
   free(x_d);
' q+ a( a0 L* u4 m' P+ U) {" \# j
  ?4 h* J/ j0 p% J5 F. i+ l" [- @使用DSP侧单独调试功能,验证动态申请没有问题,
& x% e! G5 Z0 e9 O- c$ Z% C
9 k$ S) T+ G4 X( l* m2 v* r但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
2 N+ |6 M' _! `4 ?) v2 S

% C2 e% u* x5 _1 l" g! A2 D, q. G; n1 k: j5 V$ s6 @$ t3 B

: U! {2 E6 G9 V8 d8 p
" w3 Y( E: K" H, H  s- r
# p2 H/ e6 H( g0 F$ q$ J, ^( v% c% k  v0 l, `

" b: @9 l( ^, M; J! W. M% k
% d  J! P" X! {* F! |$ ~* A
3 b; Y! P5 A! T! B/ Q
1 E1 f6 \. ~& C8 ]$ p
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
. a1 l+ w4 V) k. `$ D% p  }& CProgram.heap = 0;3 L) ?! s- e) I& ^* G
Program.argSize = 100;  /* minimum size */
5 w0 X7 N, u5 v' N+ K. BProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */4 r% ]7 A+ N/ p/ D; }
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');. n$ J; L0 T1 h( ^- J
var heapMemParams = new HeapMem.Params();6 d1 X: @' @2 c0 z5 Z+ g
heapMemParams.size = 0x4000;: N- v5 [+ d9 ^$ [
; G8 `# h% Y0 f/ @& v' M
var Memory = xdc.useModule('xdc.runtime.Memory');) g" a) J1 x$ @+ W8 L+ |
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
. ?' h) f7 e$ E' C1 ^0 w+ I# |% j2 l9 N1 N
我大约calloc  每次共计大小为5K*16bits,
; ]! J9 Q' E3 R; c/ w2 G/ i( i而默认配置才0x4000、需要改大。; V4 `3 i3 E" S' u: ?6 z+ g
( ~, A: `: A6 [1 y# H
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明1 T" g3 D. J3 }% W0 D
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下' M$ u# G# m% S
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)8 r1 I/ k* j! q: K. m
4 o0 ^+ g3 U1 b: f1 F
是不是需要在DSP.CFG中进行配置+ V: V: h- x6 f: Q1 H) ]
我现在的配置为
0 @4 I" t) M& ~# i- @8 ?8 C  ?
/*+ m- }1 y) T3 o' L, q
*  ======== Operating System Configuration ========9 R& k( @5 C) E  k
*/# e3 V2 x& K% W
$ d- U' z( K+ d
/* no rts heap */
, ~8 b% |; ]/ {# ZProgram.heap = 0;
* w& r, Q! `4 U- }6 QProgram.argSize = 100;  /* minimum size */
* a$ g+ f9 v; l6 o: k+ n! q6 f0 @Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
- G/ J1 T! d. m/ y
. Y! ?& s2 U  {  T9 d/* create a default heap */
' e8 r* M6 `6 a6 d0 }var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
( a$ @1 G& m) v( t# U, v7 ~var heapMemParams = new HeapMem.Params();
) }/ G+ s9 P6 ~, C7 j. \heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大1 F0 c3 s/ s, ]) X4 |/ j0 L5 Y

5 b4 b. z4 S5 A' E
var Memory = xdc.useModule('xdc.runtime.Memory');
9 e' h$ o' w% ]; N4 t/ iMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
1 v. l8 f8 {  t: H0 u; P  D  z1 t2 [& L1 h* x+ ], [. E3 u
/* configure System module */2 [- Q* o5 k  S) j$ u
var SysMin = xdc.useModule('xdc.runtime.SysMin');
# C* d) i# S, k6 GSysMin.bufSize = 0x1000;
3 Z" S! F' b, R% X. r; i1 y% B7 jSysMin.flushAtExit = false;2 t2 x. L3 Z( Q' S  j

* t  v( Q: O1 o- w7 P& Vvar System = xdc.useModule('xdc.runtime.System');+ B; k7 x  z% q3 N" x
System.SupportProxy = SysMin;- }' T) p! z. ], D4 y2 m; U
. Y6 W+ P# ]. c
/* configure SysBios to use the lower half of Timer 1 */! s" z) q3 e9 F* @7 a8 n' f: G, p) [
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');  e% ~9 h. T8 [
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
" j+ V/ D# N+ L- x; ETimer.timerSettings[1].master = true;
& I" k$ |: I# Z5 l* y) P1 w8 GTimer.defaultHalf = Timer.Half_LOWER;
% L# |0 s  K$ O7 I0 I+ rClock.timerId = 1;
3 L% }( \# ]. ^! U* l! k
2 ]6 ?4 ~& l9 [# [* a
6 z5 I2 Q0 B3 ?3 j8 L: \7 t* V9 c6 ]/*6 c! P/ ]  {! t1 ^: f1 k
*  ======== Miscellaneous Configuration ========* \. ]0 z$ }8 `7 t; t# I$ C# m  F
*/8 z9 O8 t( w5 X# n( J, C
/ k5 Q. I/ P# Q/ [
/* set default diags mask */7 O8 y2 h4 @6 z$ V. O2 V) w# ^/ t
var Diags = xdc.useModule('xdc.runtime.Diags');$ l$ o1 u% k# V6 n" U
var Defaults = xdc.useModule('xdc.runtime.Defaults');
, x* C- d+ M4 g* _' x( r; b7 s! e8 U2 l2 E9 {5 G
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;5 e# I  @! R7 Z' M
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
7 G. ^( ]: K+ i& w9 B2 ]7 f  _Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;& u1 P3 x. b- W# M0 V2 P. {6 j
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */3 i$ t. U5 G6 O# L
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */' d1 K4 I( Z, p* T, e6 _% w) T- u
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
( ^4 i) M. P8 qDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
. J) t1 m+ ]% O8 C" RDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
; N: ]( _* M2 k3 oDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
( v. D6 A4 p# {( B9 f+ tDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
1 c2 |, a4 |, S+ R9 q0 \Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
; w6 V- f2 ?. f- s7 q+ o) S, YDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
- c6 o0 ]* ^) I) q9 j2 i; SDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
/ r% {( _) O# j+ D# w4 ^Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
0 R2 t! {5 E# a9 O& ~) }9 A; P) \  U% \- ^( b1 Y
/* override diags mask for selected modules */; N# ~3 `; J+ D# v1 s, H, k, R
xdc.useModule('xdc.runtime.Main');
9 L- A: A% Q) B) g; `  NDiags.setMaskMeta(5 o. h$ C! B5 F! H
    "xdc.runtime.Main",
; {+ \& G0 P* p& q0 f5 R+ J    Diags.ENTRY | Diags.EXIT | Diags.INFO,
/ U: L5 U) a* d( G' I9 E) j    Diags.RUNTIME_ON* e0 g! t$ g0 O$ r% _
);
4 N/ U( K7 A5 J" z5 L8 _0 z2 T, t/ j4 O; @. O
var Registry = xdc.useModule('xdc.runtime.Registry');5 Q1 `7 S8 }0 w" G& A+ e# T/ _8 s
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
( K* C: x# c( v7 u" s5 I; RRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;4 U0 E& E! f  ]: T3 W4 b: e
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;  Y/ X* x+ j( ^1 V
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
, ]: G& P& w: n( _  {8 b! {
- L1 V; V5 n5 |$ M9 l. u* X/* create a logger instance */
( W, k! ^' }! S4 c' Z7 f  Ovar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
& D' ~4 I  U- m" fvar loggerBufP = new LoggerBuf.Params();! r" C' E$ D7 T# @( p
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */  a; ?7 }- x3 O, ~4 L6 h5 X2 \
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
! s3 u( e% L1 W. }- s3 K" r3 [
8 y* n( b9 j3 v+ Ivar appLogger = LoggerBuf.create(loggerBufP);* W7 X1 K: \1 a( B% u
appLogger.instance.name = "AppLog_Core1";. E/ `7 q& L& v' h3 h2 R2 v
Defaults.common$.logger = appLogger;
& O, v/ }$ F* j) E( eMemory.defaultHeapSize = 0x8192;    2 c/ i4 p; i" j2 E* f. |. I
Idle.idleFxns[0] = "&LEDStatus";0 ?5 s4 Q! g7 i
Cache.initSize.l2Size = Cache.L2Size_32K;; W& F, `( V1 w6 P

9 Z% W+ s1 X' w9 z6 q
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-7 14:52 , Processed in 0.043333 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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