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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构) r( O# v" t! p- R9 Z6 U% i6 |
  s6 m( I! m" K& C  B1 R
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
: t5 N( D+ T- d# u  [
$ b0 p! W% J* |1 S% q其他程序段。。。。。
) Y' ?  k2 ]/ m9 _  q) d) {   v7 A3 g% {+ R7 }# M
   free(x_d);
& w# l! F: U9 I$ K, b
& h8 P# \* k2 D+ e使用DSP侧单独调试功能,验证动态申请没有问题,
. [* _3 n1 J; S, {$ C# ?
. ^1 f, v$ c" `6 X: X& I. N7 N但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
9 ~. S5 w; _! t- D' X

1 w2 P, r" {7 `' c4 U9 j' K& x- ?; U& r* U' U: A9 e
2 ~% G0 Y% r) V) u% n; Q4 F2 }

$ }/ Z: e0 L2 q- }4 f& F
: K) A+ Z) d" u1 y7 I) m8 X% a( D; }

, I% n$ ~7 w) J+ j, N
/ I8 k& ]8 O3 j
3 O5 ~/ S: O8 e! k, x3 g& N( ]* M) f8 w6 E
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明- o- u% z  A' j* s, Q: h- e
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下. k4 R  r5 s% v2 `
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)% U$ ?; [% e3 L8 W2 E3 ]1 c

; ?  j/ |; z5 ^; `2 I" R- p是不是需要在DSP.CFG中进行配置, K1 V4 y+ ^% i/ r- Q
我现在的配置为
0 b. S: e8 Y: z7 C$ a$ p+ Z0 q% n/ \4 t* _) d
/*
& V4 R! U. W; {. w( ` *  ======== Operating System Configuration ========
: v  L6 n4 m2 L# @2 O7 b! O5 H */
3 Q; W  r  s- P; M2 z7 K% P. s
/* no rts heap */
5 n1 A( e1 J  ]! r: F" }3 }  `7 yProgram.heap = 0;
3 d1 P" X3 ~! w' G  bProgram.argSize = 100;  /* minimum size */4 H0 y" O' V: d* h* v  [7 P5 C  M
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
' N7 L0 `! {  W/ ~+ R$ r
* y# Q  i- w! U/* create a default heap */& m. Q4 u* ]0 m/ l- V
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');# c( t1 d4 K: c9 Y
var heapMemParams = new HeapMem.Params();% K: A  p# X, {+ J4 Q) z
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大* H$ _* b1 X- h

) x" M: y8 ]" {, b" S
var Memory = xdc.useModule('xdc.runtime.Memory');4 Z/ S0 g1 {3 L& j+ ^" H
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);+ T1 O& N4 D4 J! c( x) W
9 P, ]' j6 m3 y
/* configure System module */; Z4 X4 }0 R8 X, ^! U
var SysMin = xdc.useModule('xdc.runtime.SysMin');4 J( n7 S: ]- f% c& l4 I* D( B
SysMin.bufSize = 0x1000;% t  d4 a3 t. A* P5 B$ v4 c
SysMin.flushAtExit = false;9 }# x3 }, E# |9 W. i

' s( O; w1 h* d$ T) _1 ~* B& y  Zvar System = xdc.useModule('xdc.runtime.System');
. _' @% {: V# n+ }! I( l- o  I4 `System.SupportProxy = SysMin;
" A# f. o, ~" l. ^0 s  L- O
; r; F0 i6 ?5 y) z7 z+ y/* configure SysBios to use the lower half of Timer 1 */
# F8 M- L9 Y# n$ t& j' V$ `$ Z$ |var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
' B1 Z7 [6 _/ z: E' L% F9 I; |( svar Clock = xdc.useModule('ti.sysbios.knl.Clock');% O( @+ d% w& H
Timer.timerSettings[1].master = true;
* D3 h* ^, B. w/ y0 DTimer.defaultHalf = Timer.Half_LOWER;
3 I7 L. y; p2 e# MClock.timerId = 1;
, \6 Z" m% d! R; s; x( m! }, q" k4 G# P5 w1 o/ C1 {

1 [1 f( @3 G: e( C/*
# V2 K3 [3 x( K, t *  ======== Miscellaneous Configuration ========
1 n( l& D1 A% y& D5 X' L* K */+ o9 _5 M! r! _7 K( v

- i9 r/ D  a/ t5 f/* set default diags mask *// W$ d% N/ b' A* z
var Diags = xdc.useModule('xdc.runtime.Diags');& k5 F- k- y. |9 o: {) @1 k
var Defaults = xdc.useModule('xdc.runtime.Defaults');
2 @% D5 z& N4 X+ x/ \. ?
& V, _' }6 P( f+ m' z! IDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
, ]/ {1 V- M# H: ]Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
9 j" C) Y1 P3 r4 JDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;/ l. p* q" w- q! D+ e+ e  t# j
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
3 R6 Z5 Q+ X2 h( N! O8 J$ O2 LDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */7 U0 [7 T4 \9 v
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;7 N; X$ Y% U/ U" F& ]. ?
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;5 S: ?' W( I) B+ k1 g
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
% Y8 O' q/ T0 C4 [7 FDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
9 N6 l# f, b/ |  dDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
5 a8 p: [; R, i( ?( ~  L  @7 ?Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
' z, @5 }: A3 uDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
& }! Q$ O. r* g) K$ h) M# EDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;7 f/ B' b" U9 c. W
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
& T; @7 _: o# S% g1 s% i4 s6 j
  j/ G" E7 b; Y* ~/ {' a* L. v/* override diags mask for selected modules */
3 P0 b  S( W3 t. _- }* Pxdc.useModule('xdc.runtime.Main');! E: r3 [( G& @& R9 B+ C/ |
Diags.setMaskMeta(1 i7 P( V5 y% n) `; y- B! M
    "xdc.runtime.Main",
8 R0 J' j1 k; Q! f" n  y$ f) i8 @    Diags.ENTRY | Diags.EXIT | Diags.INFO,
0 T/ l# L4 R. J" P/ l& h0 ]    Diags.RUNTIME_ON
" _& [; H- H6 V# f) K- a4 h; I9 e% O);
+ r# D# ?$ Y9 i* ]/ Z, C. O9 k, k' Y% K/ s! L) ?& t  u
var Registry = xdc.useModule('xdc.runtime.Registry');
* I# q5 ^. s7 w! T% T0 KRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
5 ~5 `, S1 q& i: [( HRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
+ C) S, B& {$ b! F; b1 xRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;) B9 o3 N- J+ R( @
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
7 d; ~$ W' C# B2 W4 Z  H4 P3 ^( c
' o$ R+ U: k- e0 a' h* r/* create a logger instance */% a6 h/ |3 i! v% H: F3 O) ~
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');5 E9 k) V. @& \# n
var loggerBufP = new LoggerBuf.Params();
! c" o5 G/ H! y9 ?1 ?' U, ?loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */: f1 }& A( P: A8 h' C1 b: k' {9 ]
loggerBufP.bufType = LoggerBuf.BufType_FIXED;; w8 w0 i9 M4 H
; O, E3 r% H4 v8 f9 D( _- x
var appLogger = LoggerBuf.create(loggerBufP);
6 \. @8 {! Y) T1 TappLogger.instance.name = "AppLog_Core1";5 k- A3 G" y+ R- ~; I
Defaults.common$.logger = appLogger;8 d% ~& I- H: _
Memory.defaultHeapSize = 0x8192;   
8 B. A. ^  R* p* zIdle.idleFxns[0] = "&LEDStatus";
6 q$ @  Y! l* Z3 R8 x6 u; P0 ?' @Cache.initSize.l2Size = Cache.L2Size_32K;
, S; k0 s9 v7 r4 x
8 O# m' D0 n' T: W* m2 K
回复 支持 反对

使用道具 举报

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+ z$ V5 ^8 E' @' e
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');& l$ g# r! i; B
var heapMemParams = new HeapMem.Params();' h* @/ ^; {, j! h+ r+ ]
heapMemParams.size = 0x4000;3 ^- j2 i6 H& ?" O
! g$ i3 i1 b4 G8 [' t# a* _  p
var Memory = xdc.useModule('xdc.runtime.Memory');
/ W* x# ]" X2 k  PMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
+ J* v# `. a/ w3 T2 L8 Z* v, e9 y! e9 t- ?- d4 T4 f
我大约calloc  每次共计大小为5K*16bits,
8 O- Z5 k  ^' E& G( V+ f  s而默认配置才0x4000、需要改大。
  l3 B, V# J- S
, ?; b- J$ v/ p- f' h4 Q9 M. X2 ]
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */# i1 r( {; n9 S+ u9 X, q
Program.heap = 0;' n, g0 B1 [$ H; ?, w  A% T# n- w9 P
Program.argSize = 100;  /* minimum size */
8 c% j3 X! ~! c* 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-1 14:41 , Processed in 0.071030 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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