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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构. B2 B6 z0 W- W: w5 W; K
$ a" W' r, @) y  L7 W. Q$ i
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
$ l7 S: M, c! t  a8 g
" s5 _6 k* s# k  h% z其他程序段。。。。。  M: M! q5 E9 Q: r1 [9 T

0 C' e0 V' b' t$ n* k+ [   free(x_d);9 n6 P  B) g. l3 Z

" t3 \/ q9 O3 ^3 a使用DSP侧单独调试功能,验证动态申请没有问题,/ b) e! i/ c( H4 c. `! h
! W5 \- k& m0 O' {1 n: b
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。$ ^% w" Y) F) d8 x% D

$ R6 O. Z% |0 x! }
) r  A: z5 E, F6 W' Y& e1 Y: r* b$ o
; b3 A' p& p) b+ n( T: B
9 m6 ^" @; z6 r) |* Z5 D. R- ^0 |9 p% N
# ~) {. o! N3 D4 o- I7 m
1 D7 U6 l, S; |1 m* Z& r

3 W. P- s, p. W" x# I; ?* ^4 m0 A5 w6 ]  {% o# X

; K; k2 J/ V6 h; ^+ w5 A' s3 r
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明  R3 Y/ y! X3 X. W  m. P5 l
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下9 r" E" [0 G. f5 Z
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
8 A1 |! V( g, D3 m; u- \
+ Q/ L  c5 S( s+ U" u- z6 |; {  B  N
是不是需要在DSP.CFG中进行配置
+ p* M1 @' H5 m4 P, J0 t" {我现在的配置为
: H! ]+ i, v5 G+ |9 q$ R
/ t( [) Q4 o. z: L& R& K. I; Q/ r; K/*. P: s! [) C& c' J$ i. Q7 q+ e& n% S, n
*  ======== Operating System Configuration ========
1 Q$ Y' \" a* _ */
5 _( e/ d- W6 L% y6 z
9 T5 j) R- L: s1 o+ F: q( \/* no rts heap */
" U7 W* n5 n0 A8 u$ `& I, KProgram.heap = 0;
7 `5 n; C. p1 B3 \  s& y3 n4 P" MProgram.argSize = 100;  /* minimum size */; m2 c/ b& C+ S$ U. ^8 I5 m
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大. U/ {, U1 ?. e

4 `4 ~* p7 p$ v) O' @3 y/* create a default heap */& D; u2 B3 k: j% F+ d
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');7 G6 w/ b' O0 o' e, y
var heapMemParams = new HeapMem.Params();
9 a& h2 O" h0 P7 S% z8 Y- n- D# LheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
0 t- H. i3 G# i$ h' z
! _' }# N5 F3 q" ~! [* t% Z  C" [
var Memory = xdc.useModule('xdc.runtime.Memory');
, o! t9 a5 L6 YMemory.defaultHeapInstance = HeapMem.create(heapMemParams);9 }( T3 j% g0 `0 a0 N) c& y
* j3 X! B. {% ?9 Y$ k) O
/* configure System module *// b: g# L1 F5 O9 a2 H
var SysMin = xdc.useModule('xdc.runtime.SysMin');
$ o" X4 K, a* O9 I) b! NSysMin.bufSize = 0x1000;
! ^! P4 W) E7 W) X0 ZSysMin.flushAtExit = false;1 N$ }( V- [. O; m) F

0 b, W' u7 j& K7 j6 Tvar System = xdc.useModule('xdc.runtime.System');2 r: ?+ D  M3 v6 ]
System.SupportProxy = SysMin;
! W. k  t' ]/ f
  K/ ^+ G) N3 ^7 R+ `/* configure SysBios to use the lower half of Timer 1 */
; e! h% e. p  h- K) w' Mvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');4 o0 {& Y7 Y4 w7 R1 f
var Clock = xdc.useModule('ti.sysbios.knl.Clock');3 ~9 I8 ]' m# [/ o
Timer.timerSettings[1].master = true;3 J# Y. ~) y0 e: [9 r7 }
Timer.defaultHalf = Timer.Half_LOWER;+ q$ b) y1 A! A( N
Clock.timerId = 1;
9 L1 B0 M4 Q& h
, y9 P' I& H9 R0 C* N6 b/ B
- m) Y. w$ x4 @2 |# F7 J* L/*1 K' ]2 Q( q' k
*  ======== Miscellaneous Configuration ========
0 h1 b- H8 w7 v1 e' k */
7 _3 G# |! Q5 S; V; p  a/ d6 X& B6 A
/* set default diags mask */
+ g# h( N( j" R4 z8 X- p& x9 fvar Diags = xdc.useModule('xdc.runtime.Diags');
+ N" S3 P* V" R6 G% Y2 \) bvar Defaults = xdc.useModule('xdc.runtime.Defaults');: ]) z- D6 l( t. K; u0 |% ^

+ N, C6 K( |6 I8 l% lDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;6 `/ N9 R) G6 d7 a. U
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
0 G2 o( ]( D( f& _Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
4 B4 J5 y2 Q4 N' W  x% [. {* MDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts *// e6 U0 T" f, B& _0 |4 r
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
, e2 ~6 M! P7 A2 [1 vDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
" @" y4 k1 e% M# o$ o7 e* pDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;# J8 W5 F- F3 ^+ ?
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;' W9 T; Q% A0 u5 o2 W4 g4 l
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;6 h) c8 u  S" U0 J7 [- w5 @
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
- ~  L3 l7 a8 I3 CDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
1 N7 }7 J$ o2 Y4 ^" W/ LDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;6 Q/ S/ {2 U( \& u: Y& j
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
4 y+ ]1 Z& @4 X  S& g& z& DDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;# g& @' K5 n* M6 `/ }5 x& G7 ?

  X, _( N! P% s$ G1 D/* override diags mask for selected modules */: `8 x' O% \7 Z7 _
xdc.useModule('xdc.runtime.Main');, M, c1 Z) j  D4 Q  r
Diags.setMaskMeta(
5 a9 S* F- ]: a+ o6 h, ?: q- \# O# p    "xdc.runtime.Main",: d* ?' q3 a/ x. @. z8 F
    Diags.ENTRY | Diags.EXIT | Diags.INFO,+ l" j" o+ b5 v0 h
    Diags.RUNTIME_ON
( N; v# s* Y1 g5 g9 I( v' ^);
# U( O* \! h/ ], ~$ J) N: z
7 ^9 x3 W3 o. a) [0 dvar Registry = xdc.useModule('xdc.runtime.Registry');0 Y; C4 g$ |* F5 t$ p6 Z# I
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;3 z4 d+ C# \$ J5 p( `+ w
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;: _! X' Q0 M& E7 a
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;# o  `/ I* f5 _0 @
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
0 P9 P8 L! Y4 e& C( |, y1 d) x, `- b5 r' o
/* create a logger instance */) ?* _& \+ [8 a
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');/ _/ \+ A$ e8 ^* P
var loggerBufP = new LoggerBuf.Params();* l+ U( y' a+ O7 f6 P
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */9 u0 M, }& |5 t7 y' r1 U9 D2 G
loggerBufP.bufType = LoggerBuf.BufType_FIXED;( B( {9 z% ]) ~  ]

+ s# Y' @; b" {( U; @- Nvar appLogger = LoggerBuf.create(loggerBufP);
. b1 @( F3 V8 }" Y$ HappLogger.instance.name = "AppLog_Core1";
6 h) k5 _7 Z$ X4 h9 C* BDefaults.common$.logger = appLogger;& c7 K% x% z7 a, F4 o" L
Memory.defaultHeapSize = 0x8192;    . m- E  j- z+ H( h
Idle.idleFxns[0] = "&LEDStatus";* z/ U( L; p7 m& \" K0 Q
Cache.initSize.l2Size = Cache.L2Size_32K;
4 X; v( M6 R9 L5 R9 C4 X" p; ^: d4 B0 `
回复 支持 反对

使用道具 举报

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 */
: I. N& I3 i6 X6 A  _% wvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
9 u1 v* r7 @# C7 I" U( ]% j3 Cvar heapMemParams = new HeapMem.Params();
0 h; N. c/ k+ f: S  i# z, q, LheapMemParams.size = 0x4000;
- v  H2 X: Q; e" N. l+ s( b: D1 T+ U$ B4 H/ O) y
var Memory = xdc.useModule('xdc.runtime.Memory');5 M6 H; l! i. d+ k7 I5 [" `
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
+ {/ W  T( ]# j8 b- {9 r( ^0 m; A% _3 B# {
我大约calloc  每次共计大小为5K*16bits,* m5 E/ \" [" T* P
而默认配置才0x4000、需要改大。
% ?# A- c, e9 y" T2 u% |
8 p7 J2 u8 c0 c2 ]
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */$ `" |; V2 T* R; w, H1 K* T3 X
Program.heap = 0;
' s' }+ w' K& l* u5 {9 ~$ o6 mProgram.argSize = 100;  /* minimum size */
* o$ W( R$ Z; V$ k4 D/ w; tProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-3 04:03 , Processed in 0.044403 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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