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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

. Y5 E1 ?5 G* c0 ^    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
* z+ w+ P; o$ m' o, M( Y5 b3 w  q
0 u& \4 p0 V9 G. k3 X其他程序段。。。。。
% H! i7 S: S8 j5 y# i& r
& A8 x: ~- q- v6 i4 M   free(x_d);' O6 G5 {$ q! y6 [
" k( p! U4 ^/ V% ^6 W, q' B8 K; @
使用DSP侧单独调试功能,验证动态申请没有问题,
2 ]$ B+ n% K' |
9 N3 H2 r, U% `, m3 z$ c+ B8 M但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
$ w+ v2 X8 }  ]

' y0 G9 [/ W1 t) {: {0 Q2 f# T9 K

. P- F0 X4 \8 j5 J: v6 o  U+ F) b1 K* j8 _) z- B! S8 ^

0 @7 b# j# O8 u# {4 f
" l% f. D  m8 e% F# J, B
8 V4 g% Z# w0 B, }7 ?. n
. q7 t+ a& R! `0 i+ l; w- {! g6 T8 ~, A
4 e: y: e4 @( w$ k& f) f
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
. U, J7 }" B7 v1 ~我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
9 L0 L. ]5 |1 V1 W8 w(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
; }2 a3 M' R+ t' P9 F3 \

$ A/ M6 S' ]! j3 R- Q是不是需要在DSP.CFG中进行配置
! T& X9 Y; Y8 B2 V2 l. T* N& Q我现在的配置为' F" {" k9 m% @7 a. u$ i, @6 h

: G4 L- |! m7 j9 U2 I0 b/*) S7 X6 o" e8 N6 G
*  ======== Operating System Configuration ========. A' @( W! d2 p" Z
*/1 d  ^' S& Y( T3 n" H8 `+ q

% _! F+ m: Z) V/* no rts heap */0 R( u  v6 q) c, F1 i6 N( Q4 |) b
Program.heap = 0;
7 S7 L0 c) x2 G! j- HProgram.argSize = 100;  /* minimum size */7 B! X8 x% ~" u' x2 F6 S- ]
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大, _' K" l  e5 A+ ^5 H: b. q
- f  `$ O$ x4 h
/* create a default heap */
$ w7 R( }( c$ m) tvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');4 N$ u' P+ ^  r* T/ p1 F
var heapMemParams = new HeapMem.Params();
- S* }2 W" M( I7 z: QheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
- p( p# Q# ^# E& i' q+ C8 t
+ S) I  w9 O% U; K' R
var Memory = xdc.useModule('xdc.runtime.Memory');1 D5 d& a9 }0 d
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);8 ]  M: _; \( u+ d; M7 U% Q
8 G% @/ f$ s# C+ p" ^
/* configure System module */
2 v+ q9 C3 K! B3 |var SysMin = xdc.useModule('xdc.runtime.SysMin');( U7 l5 J  k* K7 A  v# g
SysMin.bufSize = 0x1000;
* A; b. N6 l! K" d2 c: eSysMin.flushAtExit = false;& j8 h' x! X8 `4 d! c

; ^& e+ U- J5 c, ]( xvar System = xdc.useModule('xdc.runtime.System');' i- \4 q1 m0 C3 D9 `
System.SupportProxy = SysMin;8 D8 Q) I. F0 C5 {. a
' X  s$ \# N5 P9 h; R3 }5 `
/* configure SysBios to use the lower half of Timer 1 */6 l/ R8 H  q) G- }! B; T5 a) T# [8 e
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
( v" z( w* w. Tvar Clock = xdc.useModule('ti.sysbios.knl.Clock');( p% q* p. V% U. x! j
Timer.timerSettings[1].master = true;
4 S2 @9 e5 P( J9 TTimer.defaultHalf = Timer.Half_LOWER;& t( r6 k% `' c3 T& C- @" y
Clock.timerId = 1;. c8 j* p! T: ~- ]# X- \+ U
5 W  T% `8 j! p6 H7 _6 |
6 P* h, P. [& a2 n2 X7 E8 m
/*
6 L1 c4 l5 ?! a7 [3 K$ t5 x *  ======== Miscellaneous Configuration ========
  M  q- }2 i" V/ m+ Z9 G */! z. i. ?( b& @7 X) J/ f, ?

6 y+ z/ F5 ?3 J  G/ _3 s; O/* set default diags mask */7 }& ]- r) {: r' \( y- ^/ m) ?
var Diags = xdc.useModule('xdc.runtime.Diags');
& v  f7 E6 X: \/ C9 q& g6 ?; qvar Defaults = xdc.useModule('xdc.runtime.Defaults');+ o' U" [% o( m4 N
5 Q1 i; |1 I" ~' N2 G$ u9 `
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
) J. m" o: L1 f3 L0 YDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
+ @8 V, T+ S* i' VDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
/ m) A1 N; \' XDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */5 j$ D8 Z3 o, F8 w
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */2 d/ M( }% \0 ~3 L1 ^0 e
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;; S& z4 j( ?' J$ q+ y! n
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
1 `& t1 x, a! A! Y0 ]Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;8 y5 ^% f7 d+ N1 m
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;0 ?$ O) l; Z# w+ N6 v/ v8 P
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
- y! A  x' q* N6 R, M4 T5 c0 a; [Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;* ?: m, f' }$ g' r2 B5 p8 I
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
2 a# K/ J* }' x& UDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;0 k! {: v0 ~2 B3 D. p1 V. k3 W
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
* ^. ^: Y4 p8 o( ^+ P$ ~& m& U+ N2 l0 H8 b9 b
/* override diags mask for selected modules */
+ Y, N8 _6 F  [( F3 dxdc.useModule('xdc.runtime.Main');' z: H2 y$ a3 y& W, T6 L# \
Diags.setMaskMeta($ {7 B# f3 z9 x2 g: A5 n
    "xdc.runtime.Main",5 m$ \6 H* u7 ^' h
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
* i) b) r' f; k$ U) x2 H    Diags.RUNTIME_ON
. r; m) B3 J1 R/ J1 R5 m% k);0 O' g) }( ~$ g( o1 O. Q& b0 i1 G
* B$ f2 R1 ^# @0 U$ |
var Registry = xdc.useModule('xdc.runtime.Registry');: `6 R9 u/ Y& G+ G
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;7 k' E# r6 Q* i$ b" V# u2 w
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
& P! A, }# f; c; l' v! ?& kRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
* h1 W$ O+ _8 f0 B% a8 zRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;. W  j; b' w5 Z, G
* }2 D7 v  g' f/ [& @" P/ J8 N
/* create a logger instance */
; }: ~. {  |& n6 H- |& y! _! gvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');; a2 z" X# M6 W, p* W; C, \8 L
var loggerBufP = new LoggerBuf.Params();
; |7 h4 x9 p0 o" X& _loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
2 ^0 ~% j+ N0 _9 @7 Q3 JloggerBufP.bufType = LoggerBuf.BufType_FIXED;
3 |  @* E! m* z* p, U' r4 i- S% B9 Y+ I2 H6 s  h- e! E
var appLogger = LoggerBuf.create(loggerBufP);4 d! w! Z5 a% f1 y: u& X" l
appLogger.instance.name = "AppLog_Core1";
: }' X& s7 M9 O5 C6 V4 R3 _3 M6 iDefaults.common$.logger = appLogger;9 j( ]( f, B) i2 U2 r- F! c
Memory.defaultHeapSize = 0x8192;    / J5 h: ]! R3 g$ P/ u0 b! @
Idle.idleFxns[0] = "&LEDStatus";
% @, _7 D) E) S) K1 \) ICache.initSize.l2Size = Cache.L2Size_32K;
9 x* g4 e+ ]( ^( w, G  G3 O2 G' I+ j) v5 {
回复 支持 反对

使用道具 举报

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 */4 P' ~- U2 Y, e' E
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');& H0 s' C3 J0 C! {
var heapMemParams = new HeapMem.Params();5 U- `7 i* Q3 M  ]1 D+ F  _2 s' z9 J  @
heapMemParams.size = 0x4000;8 g6 Q4 h; q* N; R& T# h+ }4 N, R
, a9 S4 M1 E  A% P' G0 T
var Memory = xdc.useModule('xdc.runtime.Memory');5 m( I3 l4 {0 W4 I# H5 N
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);0 i3 v  q  J2 a# D$ N: X
3 i3 h: R5 g0 e, l3 D' c" U0 i* B
我大约calloc  每次共计大小为5K*16bits,
. I9 c+ |& {/ ?3 ^& i, u% r. |而默认配置才0x4000、需要改大。+ f) D: |/ a; W% k" v/ j" z
) g1 R. [# S. L* B2 t- q0 S. }
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */0 @2 _3 P$ M3 L
Program.heap = 0;' x9 h0 A0 `. v2 F. C! x; ~! h6 S- j
Program.argSize = 100;  /* minimum size */; @4 ]  }2 U* _
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-8 16:11 , Processed in 0.042573 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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