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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
+ r3 B1 p* n& T" X8 ~7 f' C$ P& w% J( v3 z
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
" W' ?! `' @. M0 Y5 e# t  C3 C7 b( Z' M0 L, ]8 F5 H2 W
其他程序段。。。。。7 Q, q+ T9 H, o* T+ t" }  U

2 w2 {) |+ Y5 Y7 o4 e# f4 |/ L# a   free(x_d);9 e7 }( D. ~: v8 Q3 B

- K/ v+ u" M% ?# y6 I0 u使用DSP侧单独调试功能,验证动态申请没有问题,! ?/ o5 w" t( i& f- ?
2 v# N4 \, o( y) G* o- @0 c
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
! H/ O. f( B$ O; U- x. D4 I( u
! {: o3 M8 m# ^. n  h

# r" l# x5 V0 d; O' A& c
" D4 K: _8 N' l; q, `: g8 a: r) |9 G/ o% s5 w6 a: p! E0 D8 A
6 v, e+ M7 {4 u! A8 `, V1 u
+ u& ?# p" T+ u1 a9 ?4 r% J

4 v" ?) c# c# |# M( r! u+ M  E7 v; E) u+ w  W/ i
, s1 [( C2 R, r- D; Q

$ k1 }5 Y! N9 h; A' G' J
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
; `, q5 {$ X# q8 y+ P我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下  I2 k" m3 U$ L, w9 \
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
$ W" J# y1 v+ [2 c' q5 J) R" G

: k2 r1 Q- v& E3 ~3 x1 S% H" P: U是不是需要在DSP.CFG中进行配置4 [, X0 y1 a) Q9 s7 a! j
我现在的配置为
& ]( N8 Z0 Y# U# K7 }( v0 A9 X6 X9 y! W( E- m1 p
/*
! g/ V6 }7 y/ z2 T *  ======== Operating System Configuration ========" D% F: n8 y9 `
*/
5 `1 u8 d, p+ b3 @  V- @& ^6 k* c3 \5 n1 R, H% q
/* no rts heap */* V6 V2 b  Q- r. M5 h6 `
Program.heap = 0;
: Q7 L  Y4 O) V( D  HProgram.argSize = 100;  /* minimum size */
% ?& j. h& s1 R" }7 i. sProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大6 c0 g, Q# t0 o( V
! w; m$ P2 |5 H0 k: n) \" ?
/* create a default heap */1 a: S& T& j' k2 u
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');8 A6 S/ y% f$ @. w
var heapMemParams = new HeapMem.Params();
3 @& d+ ^6 B! }heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
/ x. E1 d6 S1 k1 v4 W. P) F" l" i$ \6 b# \  t2 \) `
var Memory = xdc.useModule('xdc.runtime.Memory');
8 b3 p( C6 Z( f* I. pMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
- q( h+ k! A, p6 g8 Z7 z: f/ `: q& q3 {# o7 K( A" z3 j
/* configure System module */5 ~( N; a+ Q7 @
var SysMin = xdc.useModule('xdc.runtime.SysMin');/ u5 R+ Q) o$ p5 y+ J8 p' D
SysMin.bufSize = 0x1000;. Z3 W$ y6 t2 z- e9 j1 J, {
SysMin.flushAtExit = false;
% _5 {' c6 h* o$ D9 S. }, A& j8 g% I1 [& v0 _  y# K( i" F
var System = xdc.useModule('xdc.runtime.System');9 V6 C; S5 B8 v. ~- e
System.SupportProxy = SysMin;$ S% I( L7 L7 r6 F7 M

: h7 _% K- D" }' r6 \/* configure SysBios to use the lower half of Timer 1 */
' G3 _% F4 ]( xvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');4 N, ~6 m" G- K& Q' O
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
. A' K, @! ]  g6 JTimer.timerSettings[1].master = true;9 ]7 y, g& k& _7 g' S4 S( N" a
Timer.defaultHalf = Timer.Half_LOWER;- E3 S0 V" l1 ^  W
Clock.timerId = 1;
0 L5 a6 E- A; w" P8 S0 d) ?4 V* z  m( z$ A
4 z' {9 n/ u  j/ t
/*
* r1 C3 Q9 I7 s' Z *  ======== Miscellaneous Configuration ========4 r/ }+ c# x4 d$ m
*/
' l; {# @$ Y, f$ f! j: {
$ t- d4 z1 O2 k2 [. ?/* set default diags mask */
, H2 j9 a6 g2 Z6 f7 Zvar Diags = xdc.useModule('xdc.runtime.Diags');) S6 C+ S& S0 H: t$ I0 d
var Defaults = xdc.useModule('xdc.runtime.Defaults');
  r4 T5 _4 g, A) u) s2 N# s4 t- y3 T8 W7 d, O
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;$ r  b& Z0 r8 A" W
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
& u+ j9 t! k0 D# H& j3 `8 VDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
6 @& R6 R8 p4 u  bDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */) ~3 Q" H9 ?7 {- P6 _
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
/ P+ \( _% c; ~9 q. vDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
3 K7 {; b0 _  c' b; CDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
3 j! [1 k5 [9 Y$ E. d6 ODefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;  M3 ^1 ?# i" ]" r" x
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
  h5 G) L. k) vDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
% Y% K6 `0 P' aDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
! f: j# s) f: o6 rDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;2 g" \; p7 R; {3 r$ J
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
# W/ U) S1 q5 a9 x9 a. b: a- sDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
; E5 @$ z4 c- d6 U/ n( E% @3 @
( d  n& ?2 u9 K1 m6 c6 n. G! F/* override diags mask for selected modules */) W) f) k$ u8 u9 ^0 s
xdc.useModule('xdc.runtime.Main');6 m. ]3 r, }+ v" b
Diags.setMaskMeta(
3 Q( m; a+ [) A3 w    "xdc.runtime.Main",4 p# V! p' E5 O; k( d% V; V
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
/ d3 l! H8 l$ e' `" A    Diags.RUNTIME_ON
. H' m% E4 G) S2 J, z/ S);
  i* u( P1 i: t* a( u; S1 d  N+ f! {
var Registry = xdc.useModule('xdc.runtime.Registry');
% F$ W5 m/ r2 L+ ORegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
2 h7 U9 P: S5 m' y1 d. }, Z7 t5 C$ A" ZRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;2 h" ~. c8 m- B8 v; R
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
* _. U2 ^2 p$ O7 R# DRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;4 ]4 l# `, d3 [2 U

8 ]7 Q5 z4 k5 s7 Q5 s- u8 v; S/* create a logger instance */! V- h6 l- P: F" ^
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
. ~5 {% w' x8 F; H% \+ qvar loggerBufP = new LoggerBuf.Params();
) @$ u- M) [5 t2 ~0 RloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */1 _9 e: z, t/ S2 ^/ R% X4 g+ |
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
/ @" V8 P9 @% Z) Q9 ^8 p+ @4 B
  P9 ^1 o* N/ {* l4 E5 E; Ovar appLogger = LoggerBuf.create(loggerBufP);! s) t8 [8 Y; r6 K9 W
appLogger.instance.name = "AppLog_Core1";; Y1 H) `$ i( v
Defaults.common$.logger = appLogger;
  s/ G6 O6 Y0 lMemory.defaultHeapSize = 0x8192;   
. P9 ]% ]3 D. B& bIdle.idleFxns[0] = "&LEDStatus";
6 X: x- h3 B- T. hCache.initSize.l2Size = Cache.L2Size_32K;) Q1 p/ M% y& E4 k3 e
& F1 x  s  n+ v
回复 支持 反对

使用道具 举报

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 */+ d3 c! ~( A$ n: q* n' G
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
( ^" r! g! ~) _( O& W$ ~var heapMemParams = new HeapMem.Params();
' P2 W; J& s3 q3 T1 b7 _heapMemParams.size = 0x4000;9 v2 C2 n% F& `- u. }- V2 `; _
3 s2 J9 x: y( i9 S9 N2 Y4 D8 `
var Memory = xdc.useModule('xdc.runtime.Memory');
9 v4 J: F5 w6 e0 JMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
" b! m- `* W% T6 u# D. e
2 N1 B2 a! V, n8 j, |我大约calloc  每次共计大小为5K*16bits,8 Y2 f9 ~1 g. ?
而默认配置才0x4000、需要改大。
5 P- Y( S+ w) n4 b$ \* Q& X! i
( ~+ x3 @( d9 K& G, s% m9 I$ n9 z
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
4 r! S1 j2 v3 z% c# c! Y' jProgram.heap = 0;. O3 o" B3 _, _' r% g0 j
Program.argSize = 100;  /* minimum size */" {5 j, l, ^1 X3 \; n& Q  @
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-12 07:55 , Processed in 0.041209 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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