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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

% h6 p: n- l& Z    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2563 b- I+ I8 V2 M4 @6 @. s3 g* @

, O7 }% e; j  ~& e( ~7 s: c其他程序段。。。。。; S! q% w( q8 g( g- l
. |' Q2 n- G) _- y8 Y2 `2 b, e+ _
   free(x_d);7 m6 K; a2 i( U) |
' A; Z( ~; v' t! n' K( N
使用DSP侧单独调试功能,验证动态申请没有问题,
* i5 i! C" ^4 v  d# V6 o, r; z! O7 b$ k! |* @* I. P1 k, y) M- c
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
  a* f/ x! R# O1 ~9 k# S4 O
8 O3 a; T) {& l/ J
7 q6 Y8 X5 t: N2 T
% O2 }) O4 x& ^4 o: z8 e- Q
1 y! ~  `  u4 _! S- u7 B: z

6 W, A2 v9 M/ V- ]! d3 B# b" D2 O- S0 I+ I

& B; G; N1 U) X4 z
# m- O. C5 a5 l9 D/ Z
: _4 a% |, @# Z/ G- A
' x4 m+ M2 H* W, l* Q) x; e
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
5 W/ O5 P& L( e1 x" b我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
! `1 n' ^1 z& u(不过疑惑的是,为何单独DSP仿真就没有问题呢?)! t9 Q! ^# S' S0 G: l
5 P% ^$ `- W. z, g1 h# I
是不是需要在DSP.CFG中进行配置6 t- O8 }) c( l3 o0 E$ T: s
我现在的配置为3 Y# T4 b, P; J& A
: z2 i4 A( N6 `6 R9 z
/*
% y. A2 _; |) t1 M *  ======== Operating System Configuration ========
/ u: J$ T/ c. n( R. P- b */
0 P3 I0 L' q3 G' a2 U
* t0 Z( H, ?7 C* h+ Z/* no rts heap */0 y, l, z' U2 f+ S" j
Program.heap = 0;0 D! A4 a: ^1 M) n7 p
Program.argSize = 100;  /* minimum size */
; N; }+ Q* Y1 C8 O! ^# w/ SProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
+ r5 F7 Q: l( J; o  B* `
" F; c/ B- p0 y  E; e* a) h/* create a default heap */
. i& u0 S( t  F$ \- _- \3 s  Zvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');' v7 P/ e7 i+ a$ B1 }) y8 @; r% C* F
var heapMemParams = new HeapMem.Params();
0 ~  V' [0 F5 `. c+ D0 jheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
0 ~5 a4 K0 o# d& w+ L
  v8 ?: t* k3 X+ B3 W
var Memory = xdc.useModule('xdc.runtime.Memory');
( |3 N! T  ~7 N7 x7 y4 VMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
% [& B! Y) P* G4 p8 x
0 A* R- }3 W. n& \8 t/* configure System module */
0 H1 A$ i2 y1 k) ^+ I- [+ z6 {var SysMin = xdc.useModule('xdc.runtime.SysMin');9 \7 Y0 i3 P9 R9 M
SysMin.bufSize = 0x1000;/ |( ]- X7 _1 d0 T$ F1 s6 l) U: i
SysMin.flushAtExit = false;" c/ R( T9 o) M6 J% T( |
, T* Z1 l! V% R- ^
var System = xdc.useModule('xdc.runtime.System');
% g0 W9 }* A: I) @, fSystem.SupportProxy = SysMin;
4 a; E" @+ P0 j& a/ b( m! X4 [$ r% m& D/ Y# w7 U, e3 B* H
/* configure SysBios to use the lower half of Timer 1 */
  m1 B' [9 s4 V) |: u5 ]0 k# @var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');% a. @: A  l' F& X! S  F# J4 m
var Clock = xdc.useModule('ti.sysbios.knl.Clock');9 T, w$ F7 ^* g. U
Timer.timerSettings[1].master = true;
) l1 T: u# q6 t$ y9 |4 j( rTimer.defaultHalf = Timer.Half_LOWER;$ i! ?. `, E% v% }# F; r
Clock.timerId = 1;
" o- R$ @5 w2 j: Y
; F# ^& P- z& h6 K- j% S  H0 r: Y; @* |  q, `+ a
/*
% K1 r2 _% `! t5 ~" J& z7 c *  ======== Miscellaneous Configuration ========3 W" }6 q: X- _' Q
*/
" \) F1 g9 [, P# d) h" ]3 O0 l0 x( h; J4 A- X: X
/* set default diags mask */
1 o8 X" x% h' v/ |% b  s+ uvar Diags = xdc.useModule('xdc.runtime.Diags');1 ]1 A$ |: u9 H5 P& a+ b
var Defaults = xdc.useModule('xdc.runtime.Defaults');7 k- T! j4 Q9 @  {

( b/ F0 [6 i* pDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;. t- b+ `+ P' l& N; E; B
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
: Y/ R- p. E7 F6 fDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
5 N9 h; _- Y8 q# IDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */5 x# J7 o& T4 v8 R  A8 \! w0 M
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
! f+ m' c" X, K; o8 v* k1 t9 I+ vDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
2 a& ?: u1 K* y6 {$ Y% E( |Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;! w/ H/ `6 G. f" a& s
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
$ b6 s  ~6 l3 H& P) _3 WDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;( F& w+ T; m4 h) Z0 n
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;( {+ T! M. ?5 m6 |9 K
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
% ~6 H: T, T6 MDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
0 ?$ ]3 e$ C0 gDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
. a, F, ?, s- W& y! H) w2 S, }0 sDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
6 v$ [$ j4 X; B- _1 Q% T- M) U  v5 T! n' \( ?$ R# t  L$ A
/* override diags mask for selected modules */
/ V2 b8 h1 T# wxdc.useModule('xdc.runtime.Main');5 B  g& R9 Q; K6 j. y
Diags.setMaskMeta(# K0 A  p6 F6 W+ |- f7 A8 s. A
    "xdc.runtime.Main",
) F. r& W( a! y2 r    Diags.ENTRY | Diags.EXIT | Diags.INFO,
/ @* j! L3 l4 {! S1 ^$ H. I    Diags.RUNTIME_ON
# _% R7 C/ F; V: ^$ t6 H);  W' L, a- v4 k" [+ L& M

9 W7 b  ^* s8 Q. u; s( Z4 \$ v* Ovar Registry = xdc.useModule('xdc.runtime.Registry');2 `! J% C% K8 ^* A4 n
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;3 |* n0 U0 ?* h# K
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
% [" O) i! A8 d; ^9 o8 m% FRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
# o6 E: `% V, u3 Z. J6 _' C) o4 \7 oRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
" J7 l5 v1 R. ^$ `# P" p9 x. X! K) y* u$ N0 V) c
/* create a logger instance */
! U: c/ }+ N9 ^0 S) Q' Svar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
; ^$ F5 K" T* `- Nvar loggerBufP = new LoggerBuf.Params();
3 C. E% `' I( L7 p' Y: E! }5 ?loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
' m- T3 |: Q, E& q8 I+ qloggerBufP.bufType = LoggerBuf.BufType_FIXED;
8 M. p# Z& y1 Z0 I+ J  y: u
: i1 s: V; J, Evar appLogger = LoggerBuf.create(loggerBufP);
: N9 b" I) y# `3 ]- b8 z4 ^. LappLogger.instance.name = "AppLog_Core1";
8 Q) B8 w& d$ B/ g  mDefaults.common$.logger = appLogger;& g! ^9 G% s( v; L) G& i. x4 R& ]
Memory.defaultHeapSize = 0x8192;   
" R- y1 s! ]; s2 _! ]: k" n$ U/ ~1 a% WIdle.idleFxns[0] = "&LEDStatus";& j5 V: Q& q- ?, J
Cache.initSize.l2Size = Cache.L2Size_32K;
. H- m! y# c0 {  n/ G1 d! I# S. k. C
) \) c/ n5 h. }, U9 l$ R$ 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 */  O% `. v0 t2 A
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
8 \) R0 F% N6 A7 t% D& x' P/ Xvar heapMemParams = new HeapMem.Params();: b& e& ^) k- M& }. `1 ]3 \
heapMemParams.size = 0x4000;6 ?% ?) a# V7 q. B
. V' G* h: I) ]% F' s" H
var Memory = xdc.useModule('xdc.runtime.Memory');
' a# x) e/ c5 o" C" [Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
# g3 a- j/ U# L' ]) E( m1 W, n) u: h) k/ h
我大约calloc  每次共计大小为5K*16bits,2 L) \2 |! w1 N; a/ A3 x( j" j
而默认配置才0x4000、需要改大。
; K0 y; [. O7 x" B, v  j0 L3 ?
5 ^, N1 O$ ?/ s: t; F  |0 q8 G/ `
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
7 u5 a# |. }0 fProgram.heap = 0;' o, k2 ~2 s1 T, N
Program.argSize = 100;  /* minimum size */' D" ]5 l1 U: W1 q1 ?4 l: H
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-17 12:34 , Processed in 0.042506 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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