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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
: G. o. @1 J1 E% Z% ~: Y- e! S6 I; A7 }( }6 l
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
: o  D& }  R( Z; B7 K$ ~9 I* h0 f
( `, L; o- F$ Q6 F; @+ r其他程序段。。。。。% A4 R7 D; z) C- B7 l( j( ^( ]

9 v; C1 x% g! i6 y0 c# c5 Q   free(x_d);. h- l1 n* s5 e' B

* I; w  r4 c6 H" ?; A使用DSP侧单独调试功能,验证动态申请没有问题,
$ z) u+ K+ U: `3 a6 Q( s# E) e7 {. p$ o; f2 R
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。" }  q* V* r) n2 U% ]# d  W" R
& H$ |$ k- t2 _! T4 C) j

% w3 ^! b* [4 z4 P
3 S9 ]$ E0 g! t" M+ d) A8 X" v7 S/ B. S+ e$ g4 f4 j# O
" R0 C1 p$ j( Z) W/ `7 x- i2 H. D
- l. R2 Z" o* f8 g
+ m' N4 ]9 x  f, [7 c$ J& S

, s6 }1 h- K; y% r) S6 @( a
5 c9 q0 `, ~. ~- j: h
! m+ a6 \- z0 [7 H
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
) L. L" [$ v' G/ M0 ~9 m, _) n我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下+ b/ N0 U6 d) @
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)0 Z/ q- V/ G  N

8 N  X' k1 U; i6 K+ R1 o# _, h" s是不是需要在DSP.CFG中进行配置
6 s- v( }, }8 {" x9 Q我现在的配置为
5 n$ E2 }5 {+ x* P" K. b% n/ ?2 F5 C" e' h9 r' E: m+ M$ n
/*
4 Q4 `: K+ V0 L% P- Y8 M. [" j *  ======== Operating System Configuration ========
  q$ w8 g6 R9 i! m5 i: S. y; s */" s/ s6 |& r7 F7 G- B; }

% m* y, t; V2 Q" V# ]3 a! t/* no rts heap */+ n5 U" W- }4 l- z
Program.heap = 0;
- t( C& m3 E. E/ GProgram.argSize = 100;  /* minimum size */
7 k# c4 B0 q! y5 bProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
8 {" a, c7 [  d! r3 J6 y4 L' S0 K' i
: ~# |# }! ]' `2 d" c5 v# p/* create a default heap */
4 i' x  b- d& W2 V- I% V' Cvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
( S  I0 @! ^+ }5 L2 ]( n5 Qvar heapMemParams = new HeapMem.Params();
0 D9 x7 y+ X9 E& V! u, ~heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
/ E$ p$ k' y( V% r: T+ G
; r: w* q1 q4 T+ s9 P
var Memory = xdc.useModule('xdc.runtime.Memory');
; c- x, X: m# i/ r2 ^  J' v* FMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
9 X) m( k7 x9 y6 v1 U, z4 l
# H! K- ~* Z* ]; i/* configure System module */
0 w( a8 X" e0 u% X0 u* e' Svar SysMin = xdc.useModule('xdc.runtime.SysMin');8 d- r# Z- {% ^' ]5 m4 n  w
SysMin.bufSize = 0x1000;
8 b/ Q0 o/ ^" }6 DSysMin.flushAtExit = false;
) o; Q1 v# u2 I* i) L. {0 l, M) X% Y, H# j" M: Z
var System = xdc.useModule('xdc.runtime.System');: F. Q" S' c  L3 A; s+ u  \
System.SupportProxy = SysMin;
2 z1 u" z& Q. w$ f8 L- Y
: g9 r! s& @# G* p/* configure SysBios to use the lower half of Timer 1 */
- q9 R# K- k+ ?var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
' C* B( ?* H9 Z& G) q1 D/ Uvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
9 u5 ~8 d# C! C. D) S8 G  z/ |; \Timer.timerSettings[1].master = true;
6 o4 g: E3 y" {+ X7 aTimer.defaultHalf = Timer.Half_LOWER;9 a& {7 Z. ~4 {! |8 |+ p
Clock.timerId = 1;
6 W1 \2 K- J; C1 r. J/ y) A4 p8 [: V5 L' a. N
+ l8 F5 }0 L- s8 b& {: A
/*8 M" H1 {4 ~$ D
*  ======== Miscellaneous Configuration ========( S, e# p- [( c
*/# J- |5 y$ v& ]- y* O( h
  P  m' z# K  L2 r% |/ b
/* set default diags mask */& ]  C% C2 Z# C  m% d
var Diags = xdc.useModule('xdc.runtime.Diags');
  ~) z7 f2 b8 a2 Qvar Defaults = xdc.useModule('xdc.runtime.Defaults');: m0 c7 d  }- h

4 A6 J5 Q# |, vDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;9 _5 p( a9 c- P9 W* W
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
; D# a& _3 E' c9 Z+ m9 j% TDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;2 ^) |. h7 `4 s% t# F
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
, H2 T! q( }. {) L% ^Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */: j% ]2 y( `6 ?$ M4 B! W0 T9 K; y3 d
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
8 L2 K2 R3 r5 S% X/ S$ sDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;5 `& c6 t' o1 U) u" {; N( K
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
; I# Y7 ?& N0 @$ V, bDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;1 ~, |# i2 a6 N$ ]0 `
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
5 J6 m# Y1 c% \1 K3 {  vDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;, z! _5 l9 _1 e1 q, [4 v2 u5 H6 v
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;: T+ j: G+ u$ L- {0 S  F5 X* z
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;' N8 @' E0 M" o
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
. Q* Y: N' O/ C/ C4 g$ A% V, n- L. v( a* Q, b
/* override diags mask for selected modules */0 A% c5 H! U/ W( u9 Z
xdc.useModule('xdc.runtime.Main');
' g6 F: h0 K$ x5 Y+ z2 lDiags.setMaskMeta(
/ u! ], t* p" z; l$ x( ]9 _    "xdc.runtime.Main",
+ l- Q5 H  V# l7 B    Diags.ENTRY | Diags.EXIT | Diags.INFO,0 U( F5 G) p8 ~. s% Z
    Diags.RUNTIME_ON
, g" @2 C# m7 `" \);
* Q/ M# W: M9 ]3 E: Y# k* a/ J
) z) ~  Y6 ?" v  i- H% ]var Registry = xdc.useModule('xdc.runtime.Registry');
4 s5 Y  ~9 r# c" B$ ^$ fRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;9 _/ n8 J( N; \
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;" S: k2 p7 V1 |& t# A* E
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
: k3 @" S; G: H3 vRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;, R$ U9 W: E  r: d5 H

* H, Z  ]. L. G( h/* create a logger instance */
* N! N9 |8 S$ R  p2 Evar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
. ^& Q; X; `  W' B$ Y4 Bvar loggerBufP = new LoggerBuf.Params();
; j) g8 @4 u% ]& \9 ~7 iloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */6 A* H- R# ?5 @" Y
loggerBufP.bufType = LoggerBuf.BufType_FIXED;/ p8 R6 F6 m5 i& w% v. z0 ], s' R
8 U/ @  p; x/ M9 H) Z
var appLogger = LoggerBuf.create(loggerBufP);9 p! E& X5 z1 L$ C0 o
appLogger.instance.name = "AppLog_Core1";9 Z0 p3 Q! {; t% |" ]$ b) a
Defaults.common$.logger = appLogger;
( ~& E5 x2 P4 ~* k8 M& C( aMemory.defaultHeapSize = 0x8192;    $ x* T) Z$ l  \( r  c. v! ?/ a$ ~
Idle.idleFxns[0] = "&LEDStatus";
& S% _0 J7 |/ Y) ECache.initSize.l2Size = Cache.L2Size_32K;
: ^; _0 @& {1 |% Y: g, z
" K4 M/ u& e$ 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 */* b! P  o- S% F
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
$ ?: f8 J$ ]5 Rvar heapMemParams = new HeapMem.Params();
. ^! L5 {9 J/ H1 n. K7 D( u# W! yheapMemParams.size = 0x4000;1 e, x0 Z4 d  m* B/ m$ f

: m) a' J8 _3 G' e( gvar Memory = xdc.useModule('xdc.runtime.Memory');
$ D/ V0 g$ |0 n$ P9 b* JMemory.defaultHeapInstance = HeapMem.create(heapMemParams);* q- x( _$ @2 S0 V2 ~: _! _

' s4 S7 x, }' B5 T9 K9 ]. v7 o我大约calloc  每次共计大小为5K*16bits,, m; Q! Z: J* X+ m# a
而默认配置才0x4000、需要改大。
( l! T2 V1 K" i+ ]
9 t# J# A8 j4 D2 u4 q
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */& ]; g' R& W  F6 T0 `7 U! L/ u
Program.heap = 0;# B1 q2 A" J. M1 A; q( L. p2 O
Program.argSize = 100;  /* minimum size */, r0 `* Y1 M' X" ]1 V
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-23 10:27 , Processed in 0.041968 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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