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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
" X4 `  ~, T, r  y2 m# P5 h( \! I7 w" v0 a1 v* l  p. _% {
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2564 G( a! |2 `3 }- b# w( Q6 ?

: f) t3 K, A: ^8 o2 b4 H2 ~其他程序段。。。。。
' s0 b! G, t# s# N/ F ; Y2 R. t6 v. b; m
   free(x_d);( `0 l1 B2 ^: j/ c: m

1 _2 C! j8 W$ Y: d; [/ i使用DSP侧单独调试功能,验证动态申请没有问题,
1 r5 r4 K3 z. ~% i3 t' s$ D
7 w3 W6 `9 Y+ G2 C但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。9 z) ?/ r& X, u$ [$ {1 m

6 v+ |4 c. B+ g- D* T3 J
2 e) Q  @8 K1 ?" q# ]3 b2 w
% b6 |0 K$ M# K! |
  J/ R, W/ M! P. t9 e" F, u! i0 v; A" s& E. K' b: X+ T, I, B& ~0 Y

# ^6 w8 U# b$ _$ x: D8 u; J4 x/ {1 @  ]$ Z# V+ ^, V5 P% M% R

2 Q& |! Y' v( W7 e$ M7 ]+ z9 G* L6 ]# _1 y( Y3 M' }; E
) `, U3 Q6 `- ]3 p% D: \5 a* z. b8 K
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明  p$ e  ?6 k$ V8 }
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下  E8 }+ j) j6 k  U1 O3 g) q
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
5 I8 ^: G/ I; J) w6 C
8 m4 u7 z/ w7 O" I  |
是不是需要在DSP.CFG中进行配置
' d; P# B4 B: M+ o/ L我现在的配置为0 g5 y8 K+ E! `/ s" `0 F; K4 H4 P- P
8 ]$ ?2 s6 @' ]* v( |7 k5 r8 C
/*1 n! ]8 P# ]6 u5 R! @" T  e
*  ======== Operating System Configuration ========$ G& K' ]4 U6 v4 T/ R% n) Z
*/
3 R+ Y1 F! k% B
* e' Z( ?- R; F8 s3 C: `/* no rts heap */  @  T4 X" j. S. X7 K: l( Z
Program.heap = 0;) M, p4 @: m% b% l0 G  Z9 p
Program.argSize = 100;  /* minimum size */
2 @7 x5 x' p5 }( v0 ?6 ^$ QProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
) E0 r' M* N% K% q! [- p: Y$ B9 i) q
/* create a default heap */
; l# E* ?4 |6 n6 W- K. [' }: nvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');' y+ X) I' p7 p/ V% d% u, v8 i
var heapMemParams = new HeapMem.Params();
- `+ v. l2 X) \$ p3 pheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大% w- r9 u" O0 s2 [, O7 O; ?
1 J  s: q. s( J
var Memory = xdc.useModule('xdc.runtime.Memory');$ ~- n. c# D, D1 D5 q9 S
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);$ r# o7 H  |: m

) j. y& n* W$ n7 z: @7 i/* configure System module */
" Y+ A! g% _2 ~var SysMin = xdc.useModule('xdc.runtime.SysMin');$ I: U/ N# N2 ]. G' ]! n4 |
SysMin.bufSize = 0x1000;
6 L$ x0 V; B& z; H. aSysMin.flushAtExit = false;
7 |4 _7 Y) f% y# x% k4 R
0 Q5 @0 u9 s4 w" K! u, rvar System = xdc.useModule('xdc.runtime.System');
/ L) m0 U) E3 V+ ~; t& `' T0 TSystem.SupportProxy = SysMin;
4 @4 M. w, J% a
& W0 Y1 `( Q; z+ p/* configure SysBios to use the lower half of Timer 1 */# F8 ?% I: [( F3 t# d, M
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
7 \( D* V3 d  {' ?$ O4 O, Gvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
+ N- J4 N- G9 zTimer.timerSettings[1].master = true;# D, e0 n: @* c% \& V- f
Timer.defaultHalf = Timer.Half_LOWER;
# |7 |, |0 g5 Y9 T3 j; mClock.timerId = 1;
# |$ d# N3 Q5 k; D( D6 A/ d3 g7 V: ^; i0 X) e& A2 i5 L
7 |9 ~" m) a8 u. V
/*5 {% k- C+ R& u% m* w
*  ======== Miscellaneous Configuration ========
, C6 |0 G5 |/ N8 j, u */( z$ l( K- a# e; M& l0 I" x+ t2 r
# ~. p5 X8 }- E# u. @/ ~
/* set default diags mask */
6 O: G% D4 N8 H$ R+ w- F' dvar Diags = xdc.useModule('xdc.runtime.Diags');, M7 q2 T( I. j. X3 C8 ^5 N# x3 d
var Defaults = xdc.useModule('xdc.runtime.Defaults');/ ?: V4 I7 V( y# r' D! v% C) f
) A+ q8 {6 ?3 ]# C+ e7 }9 Q' x
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;& [+ [3 \; w- x, O* e1 |1 {3 j; _
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;# y# a; @$ ]" M4 {& G& a
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
/ X* u. L  O3 n# t- R3 _Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */8 L0 e$ G; @7 O9 z4 |+ I8 _
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
, u& o' e: w& I% a! aDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;: i; v% J! r7 n* O. E' G, K
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
# i: ]1 I7 P5 T( c. {% EDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;% x2 D" i+ W  f  V& r
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;( A# N  Y: L  Y& h
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
* H) u% a4 S; W; S' c) `. iDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;! V7 j; q9 |" z
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
* V: m7 u( \2 ?0 c- w& ]' a; iDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;. t3 N1 V3 V* R  o
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;% d6 s: ?. b& b+ p( O/ M% c
; h: h$ b* w9 {9 H
/* override diags mask for selected modules */2 X# V) v3 o9 J8 {2 c8 N
xdc.useModule('xdc.runtime.Main');6 m0 g% y9 R5 K) z& U
Diags.setMaskMeta(8 @( ~' G! o+ w9 \+ I
    "xdc.runtime.Main",! M/ d3 m; `0 e. ?0 m* @  h
    Diags.ENTRY | Diags.EXIT | Diags.INFO,/ y& p0 S  e9 \. d7 _5 r# j
    Diags.RUNTIME_ON
1 o8 C/ K4 M" L& E9 G5 f1 d0 A' Z);5 ?. f/ _7 ]' f, b2 Z, w
/ I- t- R' J" V1 K7 r& s& f) o
var Registry = xdc.useModule('xdc.runtime.Registry');0 S. ?8 e- ^& X
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
. ~# q: T5 {# J$ MRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
$ Z! q3 G1 P6 e4 k' v1 F# [- M5 ARegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;0 E$ J( `3 ]8 F  r' ~; N
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
$ A/ L! \8 g1 w3 _" C  `" P: i1 J! J
/* create a logger instance */
& U0 t2 f( b9 X9 yvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');( J$ H! G7 F8 c; J" }# O% g
var loggerBufP = new LoggerBuf.Params();
& q- h# v2 n( P0 H- Y4 R/ [loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */& x* P0 m' ?* G0 g$ Q4 ^
loggerBufP.bufType = LoggerBuf.BufType_FIXED;. Y4 W& b  v( Q1 E! I) A
, F. E6 ~& U& c: F5 |" g' x
var appLogger = LoggerBuf.create(loggerBufP);9 A! Q: ~7 [6 }# d. q) |
appLogger.instance.name = "AppLog_Core1";
5 v# T9 V* B3 D0 }7 fDefaults.common$.logger = appLogger;
8 [8 @9 ~1 t& b2 j* h# t* u0 fMemory.defaultHeapSize = 0x8192;    , H; }1 u( k& N
Idle.idleFxns[0] = "&LEDStatus";& q5 v: N4 K* \+ e* |
Cache.initSize.l2Size = Cache.L2Size_32K;
, m* F+ p7 v9 s6 s- y9 e3 _3 M7 c0 _% |5 P. g
回复 支持 反对

使用道具 举报

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 */
* _; a4 C9 a. ?var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
# |, O8 h1 w& o0 |5 _% _. tvar heapMemParams = new HeapMem.Params();
3 `( M3 U: T/ d; b" PheapMemParams.size = 0x4000;
5 }7 ~  K3 N/ a3 g( ?0 k$ a% J1 p: v4 A3 R/ j9 }/ |% ?/ G: [" J2 J
var Memory = xdc.useModule('xdc.runtime.Memory');
0 Y$ P9 e" O+ s( C( ?Memory.defaultHeapInstance = HeapMem.create(heapMemParams);1 c$ u) f1 ^8 \( `5 z

& I+ O5 t/ Y( [" E* C* K) f" h( q我大约calloc  每次共计大小为5K*16bits,
. X' Z- o' a; e& z7 B. g而默认配置才0x4000、需要改大。
5 n9 F! _$ M$ E% r& u
4 V9 Z. a, Y9 e5 l0 x
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */$ t' U- M5 f  j/ `
Program.heap = 0;
4 y' M; b0 P! g: f; q3 U" {Program.argSize = 100;  /* minimum size */
. Z+ ~( r& T6 {4 EProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-29 11:24 , Processed in 0.047564 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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