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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构& W' z0 _9 C# {4 g* W; z3 d

  F9 P& n! ^# p* L    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256" n8 [6 l' `2 @& f7 ]
9 o3 l& x/ {' {, E& Y
其他程序段。。。。。
0 g+ k5 S; E" L& n0 [; W 0 U& ]& s, s; C
   free(x_d);
& j: J  T( r  O% C' H1 P3 N! z1 [/ i$ y0 q7 y6 o$ q/ A, p0 Q" @
使用DSP侧单独调试功能,验证动态申请没有问题,
2 |) Y9 A# s" Q" W% H6 ]* F4 l! t% G5 v
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
" L' B  p) f0 H4 l& [8 P' j% J( K

; l/ I( A2 _7 k# ^4 c& ^+ Y1 {" i0 Z  m" \) h2 |8 n3 t
8 f) u3 m; l6 ^; f" @/ j

4 J7 o+ m6 x9 t1 l- ]" m. @
- x) R" W3 A4 x, D9 }- E
9 T; n& r- X2 }  P
* }- G# s3 q- M/ m. R% T3 q' o8 k# C; i' E! a6 y' m

- u  U% u( U) j9 l+ m
. M4 x& W* b7 D6 H( P
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明. ]) y5 S$ E/ H" M- P
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
2 C5 Z1 r- ]% C5 U6 `(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
% p( y5 K6 l6 O( o2 i
$ C2 Q% D+ [3 W7 S1 Q# ^' V
是不是需要在DSP.CFG中进行配置/ n8 j4 r" H7 R% B5 c
我现在的配置为  B4 D/ Q# f( h2 U  d. @9 Y
) r. `% k% _# F& R
/*
3 r' U" P# u! }! P *  ======== Operating System Configuration ========
' N* K# S* Q- Q8 m: ?8 ^ */
5 G7 ^4 S! H* K3 [7 w$ I$ D, ]8 `6 ?. m6 ~- e. J7 k4 O
/* no rts heap */
+ c, W3 F! }& A& c& UProgram.heap = 0;
7 e9 x) e4 T$ N2 `Program.argSize = 100;  /* minimum size */, _' v$ k* t# K: ~/ k/ L
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
% g" O5 f- O" P* V! [9 z, f3 c1 B0 F4 A1 B# |5 W' a, R! Q/ ]
/* create a default heap */0 ~: A0 k4 U8 a8 W, y
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');7 ^6 `8 x, Q" a' W( [5 F/ `
var heapMemParams = new HeapMem.Params();
; e3 o5 H& w: M0 D5 e0 w3 t/ W) UheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大' T! X+ ^9 ?: P' l

0 j9 Q: Z) V6 q2 |' O4 I0 z. C
var Memory = xdc.useModule('xdc.runtime.Memory');
2 k- ?6 V* x' S/ f; i4 OMemory.defaultHeapInstance = HeapMem.create(heapMemParams);9 Y% ^. z: Q1 a, x2 d  @

3 u2 d3 O4 w7 A8 O; E/* configure System module */
( {. z! X! `6 Svar SysMin = xdc.useModule('xdc.runtime.SysMin');0 ]" L6 D: g5 s% h, Y1 H1 |
SysMin.bufSize = 0x1000;
8 u$ O* ]6 q3 y, d5 o- F" Z- lSysMin.flushAtExit = false;
  T$ r) F* S" V1 M& V. p/ M3 s  g8 U
var System = xdc.useModule('xdc.runtime.System');
- ^9 o% l" J% }2 j2 a7 z6 r! S* BSystem.SupportProxy = SysMin;9 n$ s  f5 a& s# L2 T: w7 w& V
8 ^, f' u7 d1 }' ^4 E/ R
/* configure SysBios to use the lower half of Timer 1 */8 g1 [, o9 Y; ]4 B7 J2 k
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
3 s  f, s6 b; }$ a: Mvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
4 v# c" l! Y- @9 mTimer.timerSettings[1].master = true;& w5 s- Y# S  E8 F& I" [, |
Timer.defaultHalf = Timer.Half_LOWER;
9 Y- W9 k( H  q+ s8 L* C* t& U: XClock.timerId = 1;: [$ N+ c5 N$ W8 V- @% `

% `6 T9 T8 q, m" I% u3 b
8 l% A. K8 ?- ?  b6 N# q/*
5 N" G% M1 z& {; g *  ======== Miscellaneous Configuration ========7 }- h6 t% d& l, d
*/# w: l. R; h# q7 `' d+ q

  [4 t6 O& [7 X5 O3 a9 R9 O/* set default diags mask */
' B+ B- J0 N+ k5 X+ t: G! Zvar Diags = xdc.useModule('xdc.runtime.Diags');( }) {  ]' z4 h8 ?7 q  I8 r0 h
var Defaults = xdc.useModule('xdc.runtime.Defaults');
& F& J" ]3 U6 S: U4 z! U1 _
% y# `; g1 A8 R- h9 yDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
# N8 G; C" d% J9 WDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;5 E6 H- y, M1 A$ {2 b" \+ O
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
) E, _% q2 F7 u2 K' }) HDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
4 }; U, s1 h/ \9 E! nDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */  g! ^+ F$ o; {1 i; W0 g0 o
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;* N& |2 z2 C9 k- S) }( B4 Z. u
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;1 J8 e8 A: v3 P; e/ r$ g
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;2 C# T% l# s& ~9 ~, k* c! n
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
8 o" R* F* p! |5 ^# S1 c+ KDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
' x7 ]% S+ j; R% L& jDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;6 W- @- h9 o+ |5 c. h! o
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
& R: o0 J  ]% E8 @" p3 lDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
% x' d1 J. a' B& U  a" yDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;# V# |# A$ B+ J9 Y: P- p5 g6 o; D
2 y" V) l, L# j* \; I
/* override diags mask for selected modules */( d. V: i% u+ d+ }) n
xdc.useModule('xdc.runtime.Main');8 g4 u% p) n' Z( y
Diags.setMaskMeta(2 p4 Z6 o5 b1 Z* w; w1 q1 M
    "xdc.runtime.Main",6 J0 u9 P" S# Q* {7 O
    Diags.ENTRY | Diags.EXIT | Diags.INFO,# a8 @9 v7 ?" A
    Diags.RUNTIME_ON
& U3 r7 e" _/ n7 m4 A8 u% j  R);
  p; N9 @# X/ s- T# R8 _! N2 z. ~& m+ h) m; h) u: J
var Registry = xdc.useModule('xdc.runtime.Registry');- z, g$ S) H& s1 q- L2 F! ]
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;( k4 f% f& N) F
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;, e7 m6 Y5 {, {/ {6 w! N
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
( u, H) k. |' P$ ^Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;( G; @' L+ U, H

* Z; I5 O# @1 c& x9 D) \0 M/* create a logger instance */
; w- X, ]. g0 ~4 J% W' [var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
" g5 |" O* @( M5 q; v3 yvar loggerBufP = new LoggerBuf.Params();
! U  |/ H5 [/ T: `1 k. ?3 [loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory *// C; L& J4 h, |8 B4 X3 C
loggerBufP.bufType = LoggerBuf.BufType_FIXED;, e/ |0 }" g  \! F/ ~/ C' h
: ]: W0 S3 K3 B+ c9 s3 r
var appLogger = LoggerBuf.create(loggerBufP);! g3 w7 s1 X6 \
appLogger.instance.name = "AppLog_Core1";
2 ?9 U# N2 y9 Z. k" tDefaults.common$.logger = appLogger;
! c4 C. E$ ]7 j- ^Memory.defaultHeapSize = 0x8192;    " r7 Q+ U5 r& L+ O3 M3 z) q
Idle.idleFxns[0] = "&LEDStatus";* G- u' \8 F$ s- ^
Cache.initSize.l2Size = Cache.L2Size_32K;
8 K( q$ }/ p, ?* B* _  F) c5 h; o& {7 {& k9 |) q. e  q
回复 支持 反对

使用道具 举报

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 */' Q* s5 \5 ]) k, h+ _
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');5 K; e# {& ]# {) F
var heapMemParams = new HeapMem.Params();
& W0 n. [# v8 O3 X; jheapMemParams.size = 0x4000;! n: V6 p5 {4 F7 [0 ~

' u5 ?  D( a7 O' H! I$ m; F* fvar Memory = xdc.useModule('xdc.runtime.Memory');. j- v* h. ~4 c( S
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
) m! o: L  W( m9 z( Q% e
* I5 g( y' ?: l1 P我大约calloc  每次共计大小为5K*16bits,6 |  t1 j) W+ s, [+ I0 f
而默认配置才0x4000、需要改大。' `, ^4 t- w4 L! V7 H$ Z5 c2 r' @

. w" _9 g* g' M: X4 [  P
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */  ^! w; B' {7 j
Program.heap = 0;- @2 o) F3 K0 T( J; z& Z
Program.argSize = 100;  /* minimum size */! I, i- w4 }6 S* L& t& ]: N. N
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-15 17:47 , Processed in 0.041130 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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