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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构6 Q- h; V5 ^5 c+ V* ]/ z
1 @$ l* P% A9 J2 g9 ^8 c4 D
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
5 R! a- ~0 ?0 G, n0 O3 ^7 V6 o$ w$ V9 y
其他程序段。。。。。! b7 d1 y4 Z+ Y* }! E! B
. _/ n) h3 Z- O
   free(x_d);
& ?1 F1 c8 I- t* e; r. L$ ^
0 J& }* M. r& n) l, L使用DSP侧单独调试功能,验证动态申请没有问题,3 I: w; U/ L( I% `- Y- Q" G9 _

& j) l9 q* |) O( B但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。5 V$ J. |" o# W2 \6 `

* t: [, G7 y) n( {
" O" I7 ^4 ^( w. @, G5 t" N( m+ V0 o$ j$ ?3 w4 J- X
* X& a: ^# Y+ L% @
$ T, G) H0 m' t

) \2 D7 M0 r. k. Y) f/ Z4 F  k4 n2 k

4 e" q) J; p9 C6 _$ [/ x, \+ N! N% i
: W. ]* `) a% }
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
! L0 m/ k1 |) ~0 `6 ?7 `0 M3 [7 F我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下7 q3 A  C, }( y5 [1 J: w- P# g
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)  T9 b; L( H  |% |  p

3 A, p7 i( L. ?: N0 l0 e是不是需要在DSP.CFG中进行配置7 O& u) f6 l3 [
我现在的配置为
" J! a5 p; ~; Q, H& G* l- X+ R& I5 h* |5 T8 j4 J% z+ g
/*/ ?2 A( G; ]- j& ^9 j& H- G) i
*  ======== Operating System Configuration ========
* c4 m& E, O0 u7 ]6 d */: J* ~0 v$ B& Z
: @. Y: W# c( a( Y- F
/* no rts heap */- s9 u5 D# u- @3 C8 W4 ^& }& u2 R& W7 l
Program.heap = 0;1 Z7 ~! K8 m( C( \- x1 i* g
Program.argSize = 100;  /* minimum size */
/ }% P  I9 i9 H3 c$ t7 E6 t: ]Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
* d5 F8 V, p  v% t# ]2 |% X" i$ j8 T5 C% w- j) k
/* create a default heap */
; V+ Q9 ?: U# i& L, Q( d% ]; |var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
, W, b$ w9 f9 Y; Lvar heapMemParams = new HeapMem.Params();2 t' r7 l9 ?/ E' d. V0 \) p& U
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大1 H  v+ ~; t, ]& \/ A& G

. `( p- q5 O5 \6 N
var Memory = xdc.useModule('xdc.runtime.Memory');" h  ~( Y9 b7 F5 w, o5 p' n2 L' w
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);8 Y: P! g/ }. P; L
7 ?9 a" V& ~9 b1 P7 j4 U
/* configure System module */
5 C! v4 c3 `/ N. pvar SysMin = xdc.useModule('xdc.runtime.SysMin');& G2 E6 t+ Z- H/ A) |
SysMin.bufSize = 0x1000;
  X& e% I2 W1 I% q& H3 k/ M- A& ?  LSysMin.flushAtExit = false;* \0 l; N- |) M) I$ x8 |6 l

+ t/ @  l! T+ a- c# ^, rvar System = xdc.useModule('xdc.runtime.System');
/ ?& C! C  }5 k7 B! x* [System.SupportProxy = SysMin;
" p2 |7 A0 N" y) F6 p6 b/ n. o/ S; ?  s6 P2 U( F
/* configure SysBios to use the lower half of Timer 1 */5 P) f1 Q! x8 ^+ ^/ j, f
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');8 R1 A+ w( R, x
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
" d0 _9 d  L; r+ R1 Q; X& dTimer.timerSettings[1].master = true;
: Q2 q- m# m1 a& {' UTimer.defaultHalf = Timer.Half_LOWER;
; v" D, r1 }# a% P0 y% F) jClock.timerId = 1;
0 _, Y& l# a4 l- d2 M
" |% u/ e3 m2 t5 M  p, M, J
" Q9 I+ R: {/ G; R6 T0 L8 i# P+ }  V/*
# H5 E+ d6 b7 n5 o& O3 A *  ======== Miscellaneous Configuration ========( l7 d5 T$ f% M; Y: {
*/+ {1 @3 G' h# A8 k$ s, Q8 A1 a

( ^0 @% O7 i' `+ Q1 c( M% R/* set default diags mask */
: ~* q  R1 m- }% u( q- r+ d; ^! s& L6 Svar Diags = xdc.useModule('xdc.runtime.Diags');
  u! Z  M; \5 B' \5 Ovar Defaults = xdc.useModule('xdc.runtime.Defaults');
& V: _3 n0 V* Q1 c, A4 l) z* B- u$ I1 y5 ^: T1 x( H% G1 H: t
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;2 |. B% Z! f0 n9 c
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;) T! y1 s& N) |; V/ S/ S
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
1 O7 b% h8 u+ f8 x7 IDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
/ z" ~+ c2 U; v8 ]4 cDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */# @: l# O/ _. h) S3 ~
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
" t, I0 E  U" f6 L/ S+ ODefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;8 J. O, z) x  A- O# |3 N, B3 b
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;: I: @& Z) |  i0 l2 l  o# d; m7 K# }
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
, c; F9 Z% G- r& @# lDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;6 j+ s9 m  q6 d
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;+ h# |# N3 X/ ~
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;8 w# r" e# ?7 U5 O3 x! v% ]% t' D7 I
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;) u2 v+ g! h% T
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;6 O* c0 y* }5 e1 }8 c

, j; c" J$ U% f. s" O0 l& L* E/* override diags mask for selected modules */3 w2 s$ j1 l9 i) u9 n
xdc.useModule('xdc.runtime.Main');8 ~; r+ I( I! M$ g+ r- j
Diags.setMaskMeta(5 K6 E; @3 B3 z1 e3 J; h# Q  f
    "xdc.runtime.Main",6 k$ v8 L. {8 S5 H# H- g
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
* m' H7 m- L( i: N7 t& P    Diags.RUNTIME_ON; f/ F! u- d+ @  R2 v. l
);- [3 ?  L4 Y- n0 A! ~0 v6 K
8 A. U5 t0 ~! ?% ^, `  p9 a
var Registry = xdc.useModule('xdc.runtime.Registry');+ B8 o  C# j( }6 K
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
! e5 U8 F' M7 wRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;. e$ B8 R8 `; V# T, h
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
; L- d8 Y' `3 M/ }2 ~+ FRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
5 H5 L  g, T7 Z2 J
" X# f5 c6 t" R* v( g/* create a logger instance */
4 t1 d8 b, o7 d' i( S9 u4 V2 _var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');4 k6 @, F3 V. G6 O
var loggerBufP = new LoggerBuf.Params();
% _4 n7 k* D" s5 L% G0 aloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */' j* [* \- h" c! }2 t
loggerBufP.bufType = LoggerBuf.BufType_FIXED;4 a1 v, Q: J! O6 z! S( V9 W

& u; x: Z3 ~4 U4 w& V4 S+ s5 K( mvar appLogger = LoggerBuf.create(loggerBufP);
3 l7 s6 o$ @! G7 a3 p9 ~- Q, G1 EappLogger.instance.name = "AppLog_Core1";
& h! e9 ~/ L  N* K4 k. lDefaults.common$.logger = appLogger;* U* A9 M: K& Z1 W
Memory.defaultHeapSize = 0x8192;   
/ [  a9 \- I* m* H5 fIdle.idleFxns[0] = "&LEDStatus";4 q6 i8 D4 p" L1 L3 o3 N' _; j
Cache.initSize.l2Size = Cache.L2Size_32K;
! y+ D! z; S, @/ p8 T0 u7 B6 s' d$ A) M+ h. c
回复 支持 反对

使用道具 举报

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% d! s, a& l6 Q4 yvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
# A6 ]" I0 Q! |3 V+ q- evar heapMemParams = new HeapMem.Params();7 d3 V1 C+ i; v: @
heapMemParams.size = 0x4000;
  r; H. r' Z4 U8 l8 W  _8 l$ B+ H1 Y# |6 A, L9 k7 p& q- G' y4 b! s
var Memory = xdc.useModule('xdc.runtime.Memory');& c% P* h/ t% {+ J
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
+ t1 a" v$ B5 v6 X
1 B& y  A/ ]! E: ^+ T4 R我大约calloc  每次共计大小为5K*16bits,
, s, M* x3 ~! G' Y; T4 m/ k而默认配置才0x4000、需要改大。
  ~" N$ w) ]6 B7 J/ s6 B
2 v; F7 B( t- X
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
& ?2 G$ q% ~7 v3 N: ]Program.heap = 0;
) S) ]: ?1 F) }+ n; FProgram.argSize = 100;  /* minimum size */
" y2 S; o3 V, N+ i. T& E" P" [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-7 23:58 , Processed in 0.041880 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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