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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构3 w% F: ]8 q5 d. `. a% ]& h

. h6 V# v' `: |& e    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256! a+ E# `$ ?/ H% ~
: S4 S6 ]+ P5 f0 D/ a- L% a
其他程序段。。。。。
6 K2 w% q, |) m$ e. v# C, f8 h- Q3 _ : W9 P  j$ E4 s; M7 C  i# z
   free(x_d);
2 n- d! |. B- g" s6 ~/ e' h1 C& ?0 P: T! {' m* s  x$ o0 x) g4 m
使用DSP侧单独调试功能,验证动态申请没有问题,
/ b$ `* s$ f  c! z' B4 k! O) z! x
3 M7 j- A6 s' }4 w2 z0 ]3 h' o) u但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。  v3 U% p* `' o& {3 w
+ E; o7 ]! t- a- b9 z- `6 A
& G2 N3 v6 |9 P

) ~- x& ]" g3 e, i3 r" b! O& b0 Q3 f

( ^# g; G# n4 c8 t+ {
; M1 l" r. |5 j$ d% W. f' L# v1 }( f, \+ \
, l% b4 ?/ a& s
1 r& t. a* |$ f( a7 ~$ o

) o5 Z, s7 D$ r! s1 x( V0 |1 H
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
" C  E" A  W4 ?8 M! n% x我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
( Z5 b1 s3 x8 x# N# A) Y+ U! f(不过疑惑的是,为何单独DSP仿真就没有问题呢?)- |, w0 m0 W- S5 D

1 @; Y0 ~8 Y1 ]/ C; s* P7 e9 F是不是需要在DSP.CFG中进行配置
6 b6 f7 c+ ^4 S& J我现在的配置为
" A0 O/ y1 [/ ?4 x2 E* ]' R& L( j% c: X8 [2 i
/*
: P4 k. k, R' c: X0 { *  ======== Operating System Configuration ========
1 d4 N- v. ?' E2 O$ X5 p! J$ ] */: \! K+ Y# f  L8 U+ q' y$ O
" U  C# v+ |9 }, x% {
/* no rts heap */! u6 J0 X* J* w; }3 p
Program.heap = 0;) f% y) ?% K% u0 r6 [9 |+ r5 n7 p1 g
Program.argSize = 100;  /* minimum size */
: n1 N* \* s8 ?  h9 V  G9 o: ?Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大: ^" v" |, P4 g8 y$ M8 e: i
  w/ M1 P  L. s3 D- c! g
/* create a default heap */
. w- Z2 U9 T; w6 r; T, W# Dvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');7 b* ~; q" B( n" f" p7 e1 w
var heapMemParams = new HeapMem.Params();$ V' ~, p4 f* O+ d2 {. N
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
+ M& ?% }1 W$ W) L
! }4 ?- M* Q# E9 d2 I4 t
var Memory = xdc.useModule('xdc.runtime.Memory');
  E/ ?( u3 ?3 K4 }% j6 WMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
7 s1 l- E. d: e  \4 D2 T6 b: _2 R* K7 m5 |
/* configure System module */# L& h/ X7 O) D& K4 m* L5 `9 E
var SysMin = xdc.useModule('xdc.runtime.SysMin');
" K: J! v' T9 WSysMin.bufSize = 0x1000;' m( n7 U5 e; H
SysMin.flushAtExit = false;
! |8 V, V* V. [( M4 ^3 I0 @
  k: z: [9 s9 u: Yvar System = xdc.useModule('xdc.runtime.System');
, X# q# ~- c5 V7 y1 `- cSystem.SupportProxy = SysMin;) ?% D5 e* |& n, ]' ^4 `2 \

3 k, p1 \% q$ ^. U) Y2 M, A2 X: d3 Y# u/* configure SysBios to use the lower half of Timer 1 */, }6 n0 r, G" V+ R& z- W: e
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');* u9 v! ?1 Q- O0 ~7 u3 m# w5 d% R
var Clock = xdc.useModule('ti.sysbios.knl.Clock');/ p. ?* R8 N9 j+ m' n
Timer.timerSettings[1].master = true;
8 b: k4 ?  z2 v7 HTimer.defaultHalf = Timer.Half_LOWER;
+ S  x/ x4 R- s1 c/ o( g  cClock.timerId = 1;
: B% ^2 o4 j8 O+ R
0 c: @' m5 v: y, t+ L' w; x% `8 p# O$ r: ~
/*
# [! {7 \9 o/ V+ P1 Q *  ======== Miscellaneous Configuration ========
; R( f) e7 w+ k. p7 D */( D3 r5 s% m6 U& V" H

* y9 S6 l/ U" Y1 y- D/* set default diags mask */
( F" s0 p6 @3 a2 wvar Diags = xdc.useModule('xdc.runtime.Diags');. {% p) m+ V8 F, M4 |
var Defaults = xdc.useModule('xdc.runtime.Defaults');
$ r# R/ a% a% |' L4 W7 k9 t# I" C( l# `% [- n( ?+ A
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;8 T* O1 n4 m/ K  @8 U6 A0 L$ {
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;3 z) ^+ ]. J. E8 u
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
$ \; c" I" _5 a2 N; F# ~0 ~Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
. O& Q, a. P2 U  i; RDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
( k( a2 U7 B: P$ WDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
! @; q1 z; {3 g) t5 R# `: g  @Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
7 k& q, h6 h8 rDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
$ Z; I* o4 s1 p/ Q7 z8 P$ j# e& e1 KDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;- O+ u, l7 @# N; Z  @6 P' C
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
8 j* E( }# @$ hDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;8 h9 S' j  j( P2 A: B" {
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;$ m  c4 F- c* q( z' y, T6 t
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
( P% i5 }( j1 ?9 GDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;) K" v! r- Q1 ~* {8 J: R% r9 h
- k! ^- f. M& F" }" |! h
/* override diags mask for selected modules */
( n# P' O) p2 D; I6 [: \xdc.useModule('xdc.runtime.Main');
" U$ Q7 p8 M8 V7 |! O  i+ xDiags.setMaskMeta(
8 o2 V& f: X* W' _2 I6 Y# ~    "xdc.runtime.Main",
6 a9 n+ j1 j1 {1 t: a$ D; n+ U    Diags.ENTRY | Diags.EXIT | Diags.INFO,( }7 R. B5 K0 t8 S7 Q+ x$ F1 P( G
    Diags.RUNTIME_ON
& A9 L6 g2 n' C2 Z  w) E);6 l. r' U7 |/ E! ]5 X
. L6 G2 q9 I  j9 f, c0 f
var Registry = xdc.useModule('xdc.runtime.Registry');/ i7 j' x' k8 V/ f
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;3 y: C) w3 k! a& k, A
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;$ b8 {9 d; e" `3 O; O
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;  ^( S. w" A% n& S  G0 u- D6 a
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;8 D6 {. }) B/ b4 A2 M0 w

* u7 V" F$ V( |/* create a logger instance */- ~; ^8 h5 V' g4 l0 T
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');8 A$ A7 f! U0 i
var loggerBufP = new LoggerBuf.Params();2 ~5 ]7 a, f/ i6 a" {% p7 U
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */$ J/ W, P6 j4 l* u  _( o
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
9 K! @' h' s$ f4 y/ M1 Y/ j
; F) j% W6 r5 S. Y$ w+ |) P8 evar appLogger = LoggerBuf.create(loggerBufP);6 i, D& w& p/ T2 D, n
appLogger.instance.name = "AppLog_Core1";
( U- y. D* z% b9 \& IDefaults.common$.logger = appLogger;# p/ g5 e, A/ N; N, j  m& H
Memory.defaultHeapSize = 0x8192;   
$ Y6 i8 h+ h. k' bIdle.idleFxns[0] = "&LEDStatus";
; o. _3 w4 V3 \! t9 u9 lCache.initSize.l2Size = Cache.L2Size_32K;
' X7 B& B2 W7 V& O  [. a! j+ }- g% C/ L- X2 i& _
回复 支持 反对

使用道具 举报

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 */0 n+ b# ^1 C" @1 a  B5 U
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');( B9 q$ l1 ^* L2 T) u$ ?7 E
var heapMemParams = new HeapMem.Params();5 r, `7 h! U3 ?& j" v) v
heapMemParams.size = 0x4000;
  q; ?) {% q9 |6 }7 W9 @7 D3 T! y" i% F1 V+ L) Y: z" ?
var Memory = xdc.useModule('xdc.runtime.Memory');
. S8 Q* U* y; [& p0 QMemory.defaultHeapInstance = HeapMem.create(heapMemParams);; q! ~( Q9 T' i4 H4 Q: ^' V
& Y3 T- d1 M: m" a
我大约calloc  每次共计大小为5K*16bits,
* J) n# E1 S" T1 k% O' e而默认配置才0x4000、需要改大。
5 m' B8 j% @/ a9 \
+ T# L. @$ q' `
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */( ~& Q1 f1 t! D, o0 \
Program.heap = 0;
4 I# |+ T3 W- w: fProgram.argSize = 100;  /* minimum size */3 u7 `1 j: ]& M$ N# o. `
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-4-7 17:03 , Processed in 0.042707 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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