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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构+ t9 I& ]. z; U; Q( q8 y
) h8 K  u6 y- c; I
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
% ^) j7 d  _% Q2 R/ v+ g
3 v. R, k- i$ g其他程序段。。。。。4 _) d: ]% G- M. z8 j
' y% J- C2 Z: R- g' D
   free(x_d);  g" r' N* g3 h8 `; _8 i& P

2 u/ j4 z* R" Z使用DSP侧单独调试功能,验证动态申请没有问题,
& ~( {2 m5 G9 F% I( X. P+ I
" o8 k8 H' X6 x( N) f2 R但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
$ l" F4 \6 l% F0 U( Z" K) Y
- I$ y/ V/ X5 ]: p' B- d/ W( k
9 C9 ?) x& m6 m5 ?+ H8 k

- L$ z, k0 ]  k& a# q- z2 }- N. z' y- D0 ]& K
9 r  n+ _. I+ h4 a. _5 a2 }, J
( ~* B; S0 O3 Z' }

. S" W! Y; [' M# ]3 u( S+ b6 d) C; H% U9 R7 F0 \6 s4 w* j
" l& h- }2 D: f( X! G* D2 U8 o) ~

1 n" E& d- |7 T8 b; V
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明7 k; F, V: Z, |* X
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
5 \" z$ o$ I; k  h# j  ?' g(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
' N1 h2 F9 v& n% j# y. |
3 S# R: K) s7 ]+ s5 U3 f
是不是需要在DSP.CFG中进行配置
! X7 k; T4 I% X0 S! ?! w$ Q我现在的配置为
, e. K9 L! s, I2 _7 c% s. I2 Q7 f+ K; L
/*
% a. \% ]3 M; a# `" o- [ *  ======== Operating System Configuration ========3 n. L# L( t% C
*/! q/ U0 F+ l5 ?( y6 Y

- c! X2 u0 f0 m5 t4 y- m/* no rts heap */
3 F3 d# J4 X9 D5 J2 f' d  a5 kProgram.heap = 0;
8 G+ [0 H0 s+ n. fProgram.argSize = 100;  /* minimum size */6 }/ F9 d2 A2 P/ j8 T1 e: E0 V0 A
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大, P* z: B( [4 m
" B6 H$ M: d+ y3 C( |7 w
/* create a default heap */
3 e) O* o, G2 u. A6 h; mvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
! \9 R& t; w, M. Y4 H; ?/ mvar heapMemParams = new HeapMem.Params();
$ J4 b+ y# p; N7 K% U& D- ^heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
3 l. [$ ?# L! s/ o, ~7 O
  X. F# V4 i) r' B2 N  B' y
var Memory = xdc.useModule('xdc.runtime.Memory');
1 d' t2 M: O( D8 S: t( v0 }& i( qMemory.defaultHeapInstance = HeapMem.create(heapMemParams);+ M/ z1 }3 I' a8 g1 ^  o

! o# M% i' W7 Z* `4 ~/* configure System module */& y2 m. n7 J8 {& |5 R2 L
var SysMin = xdc.useModule('xdc.runtime.SysMin');
+ g6 j% |% p4 z/ T3 tSysMin.bufSize = 0x1000;' t& I+ m# A  t, N' X, C
SysMin.flushAtExit = false;; {( ~, S7 }" D
& Q/ _6 @9 V; _- |/ q) m/ u
var System = xdc.useModule('xdc.runtime.System');. b7 F- _4 p- u' U9 S( x
System.SupportProxy = SysMin;& p' |9 j* q3 _; v  K

1 T4 S4 ]8 U( w! k) _/* configure SysBios to use the lower half of Timer 1 */( T; X& ~9 B, n$ O
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
3 D# I. B: N6 T7 w8 h# [  `% fvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
7 g  D# L  ^7 i, i+ S$ ?/ D/ GTimer.timerSettings[1].master = true;
( M- [1 J- `. S; N+ P* kTimer.defaultHalf = Timer.Half_LOWER;
5 x$ C, n, t6 Q2 Y' Q, E: G6 b4 P5 a1 A+ LClock.timerId = 1;
% b# l3 b! l# o0 `! k# {- Z; w4 i: f$ r. v* K. r

& I' J8 [( O1 t6 u* F9 ~& U1 B/*
) V; h3 S( w; F" O1 \) D6 z& w *  ======== Miscellaneous Configuration ========& o# I. M! U9 c, U( b, P/ W+ k  M. S
*/% [$ W4 y$ I0 p8 M# D

4 L) K0 E/ a" s/* set default diags mask */" @( d  n1 c3 I  d- y6 F6 X
var Diags = xdc.useModule('xdc.runtime.Diags');
! H2 {  Q; J" u# Y% s4 w% Evar Defaults = xdc.useModule('xdc.runtime.Defaults');
8 ^8 Z; T3 B9 e% C0 J6 `+ \" m5 S6 T
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
- h5 K: R7 @9 O% z" M( e. ADefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;9 e2 s! x- M7 c) i; {: L5 d  l
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;7 w# _7 ^; b: e+ R$ n; T" h: \6 q
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
+ b" W4 K  X( a* k8 S5 o$ w+ Q- T- FDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */+ b/ K% f! e. o6 N9 F6 V) J
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
# L$ |$ m& T. k7 ?- I4 ]5 iDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;; W$ X/ \$ R6 q
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
% T5 I* O  s) F: Q' a; BDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;; v* v' p6 d* P& e! x% ]+ L8 L
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
7 n0 {5 I6 ]3 h4 f  g  r1 d! zDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
3 Q5 W0 \" k7 @. B- uDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;  S& @0 B+ C$ }& ?( @/ Z- E
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;. W: y  D' b9 k' \4 T+ h1 u% N
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;# W+ T& M9 E1 w% K
0 r" R3 {' P; Z3 \
/* override diags mask for selected modules */4 y; \9 l# f7 u0 S. [  Z
xdc.useModule('xdc.runtime.Main');
6 Z5 I8 u7 ]6 z& j$ dDiags.setMaskMeta(
/ [5 D1 Z. `& d& P- j% E. N    "xdc.runtime.Main",
% Q1 E0 f, f8 w) i& V5 Q    Diags.ENTRY | Diags.EXIT | Diags.INFO,$ U" u; N2 e! e- E
    Diags.RUNTIME_ON" c+ s/ a" w( Q+ _6 d3 e  J
);
# ]. k. f+ q! |8 Z8 v. I: E& Q! X. `
var Registry = xdc.useModule('xdc.runtime.Registry');6 P8 v' `# n( X8 k' u1 D
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;! M5 s# @9 a! f& I
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;5 E* ]% O- _% y; r: D
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;3 p. w9 I9 r9 n. t4 x( \2 j
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
1 l9 N+ c6 n, Y; }) H! Z" b% J
4 y" q3 n/ c) k3 l4 _7 Z/* create a logger instance */
6 C8 r: t5 Q# [6 nvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
, P: V& n+ U# _3 Z: q% Q4 _var loggerBufP = new LoggerBuf.Params();$ Z& e. |. ]3 l, `
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */+ s# ~# M0 m+ e2 }1 q- [$ E
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
( M) b8 z; ^# J- ^: e, c% N, W+ H* f7 {: f
var appLogger = LoggerBuf.create(loggerBufP);
4 R/ X5 l1 V% C% |2 a2 gappLogger.instance.name = "AppLog_Core1";6 F6 p% V8 r+ ?5 r, A8 C- b4 B
Defaults.common$.logger = appLogger;
' Y8 l: C6 k3 a1 I7 ~( sMemory.defaultHeapSize = 0x8192;   
( ?; q5 R, l- i2 x; o8 |Idle.idleFxns[0] = "&LEDStatus";
$ O0 T# B3 @. D: YCache.initSize.l2Size = Cache.L2Size_32K;7 D# O: B0 Z# J7 {! Y* b
: O' g: e+ |3 z5 C. y+ k) O- o( r
回复 支持 反对

使用道具 举报

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 */9 z( J) E' y7 e0 h. b% x
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');+ u; O5 x& R+ {$ o4 C
var heapMemParams = new HeapMem.Params();( I9 l# a. Q, e
heapMemParams.size = 0x4000;
( J9 U( v. @8 ~+ [9 l7 Y& H5 ?) S) B/ Z8 N4 @& x8 }
var Memory = xdc.useModule('xdc.runtime.Memory');
* j& T% p% U, w( S0 }+ OMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
7 r2 H3 T+ a, X# A! V( v" X  d1 m) E. C; c2 g, g* }' O
我大约calloc  每次共计大小为5K*16bits,; y7 W' q. o: V; J7 n
而默认配置才0x4000、需要改大。
! U4 D( h/ _" L* P" j
: M" |6 F% O8 G% N3 j# @& q3 v
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */, |" e, B* d. e% F
Program.heap = 0;
; |. f# R- ]8 _( H& ~2 y) n5 p9 ^Program.argSize = 100;  /* minimum size */6 h! F. Z  k9 S7 A2 V  m
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-3 14:41 , Processed in 0.042725 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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