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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

7 p7 }" d* W, J: h; f    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256+ X* P- o( V: K6 s8 u

) ~3 K, t6 R6 Y, t其他程序段。。。。。5 \- u$ P+ d. G
0 [1 n( v/ @; ^5 U( j8 T- U8 H' N
   free(x_d);: k' s/ A' P& z
* h  K1 A; j6 k, K4 H+ a- @. ]
使用DSP侧单独调试功能,验证动态申请没有问题,
$ m/ |# {7 i: r) y- U- W! |/ u6 [% ?( t$ Q
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
+ _& I# w1 v. Y  s
) w* A! Z5 L) n# c7 C9 a
  B, W' x) b, R
* x8 }: e7 {. j, f9 D

+ N' J% b* g9 z% u" G' l1 ?
! ]: w& ^. u1 e2 f: t* G8 w0 }1 R3 q' Y) ?
- M  n+ L; i1 Y; N  {
# V! l9 g+ B0 ~  }$ m; R; X

" M8 O5 R* p$ V+ Y8 V
; s) c1 X0 L$ b4 i. c3 v( V: V7 Y# F
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明6 j9 T$ ?" N5 p: @6 |0 C
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下- d, x/ i" P6 `
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
) V. ~7 G# H+ x! U2 C
& ?# O/ T3 h& t2 Q7 V  m4 g$ H
是不是需要在DSP.CFG中进行配置* m8 t3 u/ @1 R3 V. y" N: J
我现在的配置为
) n! f* \* T. E, [/ i  C3 o* c! h9 S4 Y- Y" `( `- P8 n
/*$ }! S2 }' B6 J* D* ?1 a
*  ======== Operating System Configuration ========- R9 ]" m% c& N( }0 B6 X
*/; C& ?4 J. X) A, N4 ~" ?
, u6 H( i6 Z/ s0 R* v' O
/* no rts heap */
# N2 B) z: b$ t7 }9 EProgram.heap = 0;) {0 w3 X- v" w5 Q* {
Program.argSize = 100;  /* minimum size */
4 {, U5 y, ]. o. d3 o0 A" GProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
9 Q& X2 u2 [- J# r" C: g3 H& t7 r5 ~8 i3 o
/* create a default heap */
( L/ o! p- y" ^6 r; }+ l& xvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');: `: K% L9 e& @4 p& I$ J
var heapMemParams = new HeapMem.Params();
$ K* Z! p0 A) P! i, P" Q: J$ LheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
% x4 G5 E* D* _* J: I# H3 ]0 Q2 q( o- V+ V
var Memory = xdc.useModule('xdc.runtime.Memory');
$ V/ ~+ s8 f( N( \: Q% o# mMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
2 A1 B! T% |$ w4 g( Z
5 a% q' l& L: T/* configure System module */: k; T6 W. I& Y( F+ P& i* z
var SysMin = xdc.useModule('xdc.runtime.SysMin');' |, o0 }8 W$ |$ y6 G2 O& C
SysMin.bufSize = 0x1000;, _: j$ z' t7 t3 `* a% l3 }; H
SysMin.flushAtExit = false;5 t, j' ?0 F0 W

& Z* H5 d  |1 gvar System = xdc.useModule('xdc.runtime.System');; J6 d$ k8 z& ]$ E
System.SupportProxy = SysMin;  z- Q2 }3 m) n9 X; W5 X$ E
, v$ p3 c1 {2 f' P( L! j9 h3 I
/* configure SysBios to use the lower half of Timer 1 */6 x& |! v: ^3 M4 P0 W: u
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');( ]9 s9 n: K7 j3 o) @; }
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
) f7 M% ]7 p/ T' @9 |: Z. l+ ?3 jTimer.timerSettings[1].master = true;: n8 m7 ~( i# V6 G# V1 t
Timer.defaultHalf = Timer.Half_LOWER;. J' w8 p3 \' `  T! F, B
Clock.timerId = 1;
8 {) s& |9 o9 B2 H
3 r* Z" R  _4 o# s7 ~9 A
( @6 `4 _7 q7 q6 I* G  u3 x/*
8 Z; q8 v$ `! Q- I6 r *  ======== Miscellaneous Configuration ========
# Y5 Q6 z. y" D# k" ^2 ?9 d4 { */
& h; v- s* W5 }- I- w5 _5 F; ?
7 ]- ?( r/ v) x3 C% h5 n: d/* set default diags mask */
7 S9 E' T. O1 s% hvar Diags = xdc.useModule('xdc.runtime.Diags');
( x% I, c, ^* d6 Gvar Defaults = xdc.useModule('xdc.runtime.Defaults');6 P/ c. o* U6 ]+ l' w0 f; _
0 t) J! ~% [- V
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;2 n( V% {1 L7 X& B) v
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
9 o3 O. x$ l6 C/ eDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;! Z: W4 b1 ?! V& S; w3 C- `
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
% q+ o; R) m' j( a* k7 z0 b7 uDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */' m( T7 w! K8 c1 s' @; H3 \
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;0 S( x1 [4 ^2 `
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
9 B" b2 {, {/ s, X) D0 d6 f7 EDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
5 X, X% S' |' n3 uDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;; Z, }0 ]. h6 s) W2 @2 K4 \* `
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;8 M# W7 a8 n* Q' Z1 Z, ]3 r
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;# R2 C9 D+ [$ _6 |. L5 Q$ p) Z8 Z8 ]
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
+ H/ w  B! c7 R2 `Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;, J- a+ j- c5 L4 z
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;8 Y; m1 `$ l. y9 m) `
% p7 s. ~% e$ I- p9 u0 ^$ T; O+ P
/* override diags mask for selected modules */" K# y+ C% v9 l% z6 L0 {
xdc.useModule('xdc.runtime.Main');, n% X' o& x1 \- x6 x
Diags.setMaskMeta(7 A1 \" O/ p  K0 x( J
    "xdc.runtime.Main",4 `( [: T7 S  ~5 T/ `  l" I# s
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
9 o# ?5 G  o" C' R2 u3 v' u    Diags.RUNTIME_ON" A! i5 a6 r  V5 q9 c  w3 a: I
);
+ M" r: O/ N7 |5 L; a. s) P. i* V4 u
3 j" v( b' U" p# s3 J9 c  Tvar Registry = xdc.useModule('xdc.runtime.Registry');3 M7 Z* O- e3 T. {/ e& t- G
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
& s. Z. O& e# C. R. f0 O1 |1 MRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;; B3 a# R( z$ v* H; o
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;7 Z) \5 d' v  J" f' E" ?' Y
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
) h; c3 r" |+ c! }& n
# c! r! n$ f* D$ P$ D/* create a logger instance */
& [( }7 I: B/ Q& D' H' N1 L7 q) avar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');+ d( ~- }# C! U7 p. p3 H
var loggerBufP = new LoggerBuf.Params();
$ z0 ~  V; U% E* |, B1 i- |loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */3 I% M4 t8 p1 j  K3 O  s" g; H
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
5 _" g8 G$ u) b2 k3 R. E( E
' ]- q) d  P. \5 P0 ~8 E, Svar appLogger = LoggerBuf.create(loggerBufP);
8 G2 _+ i5 d; z  t+ aappLogger.instance.name = "AppLog_Core1";
! l* s6 q/ j$ ]" D. s  V4 Z% }Defaults.common$.logger = appLogger;, z1 E; O: U3 l9 C9 E
Memory.defaultHeapSize = 0x8192;    $ ^& k, p- U0 E
Idle.idleFxns[0] = "&LEDStatus";
) z9 Q# ]$ \  D% X7 y" b- gCache.initSize.l2Size = Cache.L2Size_32K;' e& e- h. [/ U

; o( P4 J! B; S# T4 i/ Z! e
回复 支持 反对

使用道具 举报

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 */
& r9 n, R# e" pvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');6 h( i+ y3 z' B( ~3 B
var heapMemParams = new HeapMem.Params();5 e& e; |/ S0 i) F1 b, Y
heapMemParams.size = 0x4000;
3 g+ S( L0 I6 C' n! i. X5 z/ e
0 a8 D. ^8 r% n3 u. i$ y% Z5 _var Memory = xdc.useModule('xdc.runtime.Memory');
7 ~  h3 X* I& s1 g; jMemory.defaultHeapInstance = HeapMem.create(heapMemParams);5 G) j/ X$ c3 S2 R: s

; S6 E7 ~4 y. `) Q4 M我大约calloc  每次共计大小为5K*16bits,5 j; L& J7 @; F& l& [! D
而默认配置才0x4000、需要改大。9 j5 s1 @  V- A: |
+ x9 m2 Q" k, w" S+ \
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
) u& d7 D+ W  `; `3 JProgram.heap = 0;0 }' b8 u5 Q9 b. K
Program.argSize = 100;  /* minimum size */% s: l2 J$ u- b% r! ~
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-19 02:19 , Processed in 0.041636 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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