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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
1 l- i* K- r+ @# g, z9 o+ R9 ^8 U$ x& [' C6 r+ J5 |1 l
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256' q2 m* O9 f6 y9 S1 g+ l

/ {" a+ |1 m& l& @6 N6 ~& T其他程序段。。。。。
( d) Z3 Z# o- Y7 N# r6 y$ J1 r
. n/ o# _( t& d6 K4 W- {4 e& A% E   free(x_d);
% p, F/ O$ Z/ E2 q& N; }
+ o8 t* Y5 g& N) \6 w7 c使用DSP侧单独调试功能,验证动态申请没有问题,0 m. z  r* Z- C" P" }
1 o8 H: ]& V1 f9 m2 c9 \
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。/ W3 i& t9 _+ P0 U

* C- A8 D4 O. Y  h+ |( L& X/ j1 G( f" W0 C
$ x: u5 F. G* u7 O# o4 z" C$ _
' W( D8 z( H) `
* J! [6 R* n$ Q# y1 }5 I

: W5 O0 V; i5 Z3 d4 s1 H* ]6 N3 a2 B# _* }4 V/ u! k

; X/ n2 Y  r3 T% k$ q# T" T/ K; ~9 u7 ~* }' ~

( d( X8 h$ K7 B) o3 L) D2 u( m* T
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
( k! h' F+ Q! g8 a/ L9 \/ _我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下- g+ u0 _3 F) ?7 N! ^5 w
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
- o2 {6 U- ^- f% g
2 G$ ]+ O% U$ A: t  O
是不是需要在DSP.CFG中进行配置
, T9 C  A4 Y. o* J我现在的配置为
3 m( h1 V8 y6 t' ^) t6 P8 u- N) X" O6 A( X; g) Y" d! ]+ L# H2 X! t
/*, Z9 n% `) Z0 f! C! ]! a- L
*  ======== Operating System Configuration ========
1 T# `+ m" O- H: ] */3 R7 S& U! {7 U1 J7 B/ J7 B6 k

7 P. g- @- R- f' Y% @( r" I+ B/* no rts heap */
; z) E! k( b) o2 k' xProgram.heap = 0;
3 `: ~& I  ^& G0 B- \9 t! gProgram.argSize = 100;  /* minimum size */8 g$ O; H0 `7 {4 R, l
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
# m1 p9 `8 n/ @; k8 u: f7 w
' p: }5 j  ?5 ~- L/* create a default heap */
: ^9 k. }- e7 Xvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
( B0 ^' _7 q" Fvar heapMemParams = new HeapMem.Params();0 T" h: j+ @5 U- U4 R1 C: L6 c
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大5 \/ c! g# F  B
  E- K8 y) @6 `* T* H" l4 ~
var Memory = xdc.useModule('xdc.runtime.Memory');
; N+ {; Z2 R7 e6 T" ]Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
% s% Y, n6 B" T0 C/ S) }5 ]# e& l7 c9 Y. ]: ~! Z; R
/* configure System module */( l7 A; \% @5 y
var SysMin = xdc.useModule('xdc.runtime.SysMin');# P8 e/ v' U) M9 x, j+ V6 L6 _
SysMin.bufSize = 0x1000;
7 ]: K/ Z/ k5 V% \: ~SysMin.flushAtExit = false;
) j5 o% g$ G. k; f" G! ]
1 |7 v0 b0 {) u, D5 }var System = xdc.useModule('xdc.runtime.System');
* r" N! ?9 O" c& ]; S$ cSystem.SupportProxy = SysMin;
2 {% S1 ]* Z- L- @/ s
0 k6 W/ P: u3 Z9 Y, l/* configure SysBios to use the lower half of Timer 1 */
* \' p7 d' o& M, Pvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');; y8 j" d& K5 U- A
var Clock = xdc.useModule('ti.sysbios.knl.Clock');0 ~( D& @5 u# c# m# X
Timer.timerSettings[1].master = true;
+ `+ i( A3 r2 P. {2 QTimer.defaultHalf = Timer.Half_LOWER;" f" e+ ?8 q3 r7 L, z
Clock.timerId = 1;
) x! C+ X6 G3 o% ^' }; I" t" C( S) M1 {2 n! A
% W2 i7 ]" o3 ~  s: C% Q% S
/*% K( {" h; K# W( K" H+ n
*  ======== Miscellaneous Configuration ========" a* i8 U, z; b2 W+ a- x1 i- L
*/. ^: S0 s1 u. K7 i) ]5 v

$ v/ R( p% r7 U2 P/* set default diags mask */! w6 Y# a  R% K5 Q  m' x
var Diags = xdc.useModule('xdc.runtime.Diags');
6 X* f6 J  f8 n: v' q1 F- ~var Defaults = xdc.useModule('xdc.runtime.Defaults');
9 |8 G: i( n, l0 S5 x9 M+ p1 l; H' Y& _$ ?9 W. b
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
' K2 I( o. M; R4 B  jDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
& [2 a% u/ r. ]- x, ]! }/ `Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
7 s; K0 q& _5 t  A/ ?Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
! v0 P' q* W1 ZDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */9 _+ n9 e$ U% I
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;( E: A' t5 P, j- @. T
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;& b0 v6 r( H2 Q% Q* |
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;& }5 R  C0 H  o! m1 u3 d
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
; c& Z1 s, @+ V- H' ]* x- T# mDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
+ L* c& c) i7 p1 U* n! yDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;/ z2 w; H, \3 c
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
5 Y7 A7 O0 Q% W& d( _! @: aDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
( |- T9 R$ o7 l! H# ]$ N# S7 N; LDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;2 B8 v9 `7 G9 f, P4 m& M# {

3 `* N  h! ]5 k2 Q9 F# R/* override diags mask for selected modules */8 Q/ y3 G" `4 M: g) O' `
xdc.useModule('xdc.runtime.Main');& {) H6 I# U! T
Diags.setMaskMeta(8 R) \9 Y7 s& H3 D
    "xdc.runtime.Main",# \0 ?9 W, Z; ?5 O. M/ I* x
    Diags.ENTRY | Diags.EXIT | Diags.INFO,' s" V! `& O, Q) Q
    Diags.RUNTIME_ON
& u1 A( Y- X; A( G/ U( s);% _" z' X8 N; i! y6 E4 G2 a) s
8 Q3 z- P( U* N9 @* Z
var Registry = xdc.useModule('xdc.runtime.Registry');
6 `/ d4 p' P0 o7 v* b9 E# c5 c' G7 ^Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;' c% l* Z1 s3 w% L1 I
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;% `, y4 P1 N9 m
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;4 e  `" N1 H: U% Y
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;% n0 }/ F) Y& w# o& Y

, P  C7 Z2 Y6 q' Z9 G/* create a logger instance */
4 c9 ~- _% \' n( a0 s6 R" Xvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');' \7 y! v6 s3 W+ x1 g0 j% V$ Z2 [& u
var loggerBufP = new LoggerBuf.Params();
( B8 B& n7 [5 ~0 T9 RloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */" l/ W' Y; b4 ], L/ G5 d7 B
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
5 F: s" P8 j+ ?# @
  Z! H& Z. i: f6 W3 F, l' jvar appLogger = LoggerBuf.create(loggerBufP);3 z% w6 F  l- t' b8 d) w! G
appLogger.instance.name = "AppLog_Core1";
! b5 R( Q1 B. _Defaults.common$.logger = appLogger;
* I/ c; v5 s+ Q" yMemory.defaultHeapSize = 0x8192;   
: q7 _' j3 Z5 b# d8 ?; E- XIdle.idleFxns[0] = "&LEDStatus";
7 c1 ~2 n1 S- U) i$ p4 f, lCache.initSize.l2Size = Cache.L2Size_32K;" X+ W& L, ~: K

! a/ N/ v2 P' T) ]
回复 支持 反对

使用道具 举报

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 */& N8 Y; X# h5 ^8 y, K
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
+ N- o$ t$ e4 l% l& a5 ]var heapMemParams = new HeapMem.Params();
7 K9 h9 H- k) N: V- UheapMemParams.size = 0x4000;: P% e% p3 z9 t4 D

1 W) A4 O% z" B# cvar Memory = xdc.useModule('xdc.runtime.Memory');! ]! k( y: a4 E
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
1 _5 `& h5 G. I0 w5 `$ Q% E( B7 R: e" F, Q: Y
我大约calloc  每次共计大小为5K*16bits,: D% r8 U( T4 @6 I* \
而默认配置才0x4000、需要改大。
8 O( P, f+ i5 F1 I, O2 m: |& n3 `
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */$ n- f- t1 c$ V3 ]2 V) N9 {' G
Program.heap = 0;
. H& G6 O' q9 kProgram.argSize = 100;  /* minimum size */5 `9 F6 t8 L' j8 h! J
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-23 00:59 , Processed in 0.042909 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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