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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构  x6 ?, {* V  R8 e
4 `# L* s+ ?: y. ~+ k) U4 `
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
$ S" A3 }4 c) e
( Y4 @* T: K* r& q0 Z其他程序段。。。。。1 r. T: t6 t! |) i. Y

8 F+ M  U3 H' M   free(x_d);
5 x' D# E. R+ Y7 V/ a/ A9 T& V' g! U* D
使用DSP侧单独调试功能,验证动态申请没有问题,
  k& ?, A7 E0 u- r7 p* u0 ?+ \9 T& s1 d& f7 o) ?; M0 x
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
5 }9 p! B8 {9 u: Z# e! N4 q! ^
6 c$ z8 B$ \6 y8 h! G

9 h  q) `4 G8 K4 j
* [0 N% V" x0 T
! Z. G( X+ V) q2 j- ^
0 k% X" Q7 ?4 E: P( n2 p* W" s5 b0 N8 G9 H
' E- B# M8 G. D/ G
$ `7 B3 C- r! c) l5 H

) M- K# g4 l: T7 ]+ X' Z, q; I8 }
' \0 {% n. U2 J8 V0 F7 D5 r
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
3 G+ V9 X0 E* [我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下% d% ~: }  H2 t1 u% @
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)9 A: N9 S" w6 J' y

# ~' g$ o9 ?! R6 A7 a. d/ {是不是需要在DSP.CFG中进行配置9 v$ t; n# j  {/ V2 ?' f' `
我现在的配置为
4 E+ s+ Z; W9 F( C8 C# R
4 f' V, S/ l9 y) g% E4 i/*
1 k0 b; d! e2 I& h( L *  ======== Operating System Configuration ========! c* V3 D8 ?6 ^5 J! I+ t- M' m
*/
% h( z& @) R: y# ?6 @2 H! c/ P2 Y# m( z9 A+ f+ o
/* no rts heap */
0 |* i: r( i& s* O) m: @( bProgram.heap = 0;- r% D$ K" n, d, D
Program.argSize = 100;  /* minimum size */$ B$ v/ g3 k4 u5 @7 J8 q1 h# |/ M
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
5 w$ K8 Z" {6 A" I$ H8 k- \; ~4 w9 j( T5 D2 g
/* create a default heap */4 |/ b! b/ k) P6 O0 q* b
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
3 ]  C5 _$ W* @: B, xvar heapMemParams = new HeapMem.Params();
$ e- X( |3 ~# b3 _3 s- HheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
6 Q3 i& X0 i% _% X# Z% T+ N) a2 Z4 R# u/ k) u7 i- u/ I. Q6 z
var Memory = xdc.useModule('xdc.runtime.Memory');+ ?% Q8 E, ^% B* x# H1 W+ z
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
5 e) f6 n1 A1 y9 O* `$ D# a
8 V: L7 l# K4 P1 w, @! S! u  T  v/* configure System module */
9 v4 ~. B) m% x7 s, w. r2 X0 Jvar SysMin = xdc.useModule('xdc.runtime.SysMin');
6 e* N4 t* A. xSysMin.bufSize = 0x1000;
1 `2 R, s- [6 B7 e3 T) xSysMin.flushAtExit = false;$ v* f, b/ E; g; L
( P( L8 v% r4 u1 C. k+ q2 P# |6 H
var System = xdc.useModule('xdc.runtime.System');
3 H' g/ J, k# O" |) zSystem.SupportProxy = SysMin;
" {0 u  S9 m7 c, \/ {8 L) W! z& [5 a  d3 ^  F, F% g
/* configure SysBios to use the lower half of Timer 1 */, ]  Z; c. C0 D3 t6 u
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');- H; i4 H, `9 C0 x3 P  b- }, V
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
8 Y: N$ p7 `# g/ ]( D1 x# yTimer.timerSettings[1].master = true;
$ S% u5 F; Z+ `3 p! F( I( b: RTimer.defaultHalf = Timer.Half_LOWER;
/ p6 o6 e0 F1 fClock.timerId = 1;
) U# [* [% x9 ^7 \  B( f
8 u1 U: d% n8 z0 M4 M/ R1 `
/ V1 Y$ V. b1 X/ f; K0 J/*% ?! h3 K& h$ r2 F
*  ======== Miscellaneous Configuration ========* i3 G: Y9 V% l. A7 e2 M7 X
*/
# [' v, S' y9 b! S6 S9 ]* S: I; u. i1 z
/* set default diags mask */
4 e% W" _3 t9 e% ~! P8 Cvar Diags = xdc.useModule('xdc.runtime.Diags');/ b- S. e' e3 R4 q. m' t/ D$ Q
var Defaults = xdc.useModule('xdc.runtime.Defaults');
$ f+ o- A- c/ @! }( U. N
. c8 z! V8 z, zDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
- a1 ]& x. H; L; N+ P7 L' hDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
+ M1 H' S$ Q+ P6 l. ]% ~0 HDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;% P: r2 o! ^: X+ k! j6 n$ |
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */4 W% S% [: J% X0 b7 F
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
) ?- F2 u  P1 i5 Q, @" d* DDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;/ w+ N. s4 S% u' j) P* @( \
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
/ l2 z. Z5 e: UDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
- X# T: N9 ^) s6 @# ]' `Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;- _8 Z* X: x/ t% W, @
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
) w2 Z. X1 Y8 jDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
: a0 o4 {- y: h( kDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;- |2 {* w3 L: Y; h
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;: x4 Q3 |, q* z2 v4 z3 M! v; ~
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
- D9 f7 i/ {) o' s& |; o: o& z7 x* e- o4 i& i# H$ m; N/ Y7 v3 l8 {
/* override diags mask for selected modules */
* \1 y) \/ u; T7 ~0 ^xdc.useModule('xdc.runtime.Main');
% x: E. K7 `: `. s& H- vDiags.setMaskMeta(
% k( g: U  E! T8 n3 f    "xdc.runtime.Main",
0 D2 F, }' X8 f$ @! C    Diags.ENTRY | Diags.EXIT | Diags.INFO,
1 b' W, p& A& N& j/ ~5 O    Diags.RUNTIME_ON
6 a) }0 u5 l7 E! I6 ~);7 j8 B. e+ f. ~! n& A6 T. n) `

  H( S; q$ h2 F6 X, Avar Registry = xdc.useModule('xdc.runtime.Registry');
0 p% \, U. t6 f& F- gRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
6 Z0 r0 J# r' `" ~0 ^, G" hRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;$ H+ P) U' w4 c8 c2 x
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
0 e( L3 P$ x$ B$ P4 `Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;: x- M( k& ~# H. A: A% k0 X
, P: b, o6 P; a0 `2 u
/* create a logger instance */% a" E5 d* H5 u, ~8 Y5 O7 c; R( ?
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
# U' G- ~3 J& Y5 c: xvar loggerBufP = new LoggerBuf.Params();
4 x* U: E" _1 M1 g6 jloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */* O- O- Y- }( J4 [# i' s
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
5 L' v$ P  O- P& Z' Z7 @! l7 B( f! Z) U! b
var appLogger = LoggerBuf.create(loggerBufP);
$ K2 w7 i* G2 ]6 }) u8 o- o0 l2 z# MappLogger.instance.name = "AppLog_Core1";
- T! y* ?- G( P* [Defaults.common$.logger = appLogger;
, S9 b2 h2 q. }+ h/ W8 T8 M1 @Memory.defaultHeapSize = 0x8192;    $ p# ~; Y: @! N- m4 K, b2 M3 x
Idle.idleFxns[0] = "&LEDStatus";0 g0 {& `' t2 |
Cache.initSize.l2Size = Cache.L2Size_32K;
2 F$ E, }$ l+ A6 A  W5 f1 G# w5 Z* O( 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 *// X0 r/ B3 ?' s+ E6 J
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');. R4 f8 J4 d/ X1 B! j) B
var heapMemParams = new HeapMem.Params();: u5 d; K* R  g4 H
heapMemParams.size = 0x4000;
% x+ h. ~1 A& k& M8 @! x9 ?7 I& N$ B1 I
var Memory = xdc.useModule('xdc.runtime.Memory');5 ^2 j! ~  |* J; r
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
- s: w" N# ]& O
, e. }7 W. _2 j5 E( ~我大约calloc  每次共计大小为5K*16bits,0 b0 U8 I6 z' Q( k, `9 W8 R+ t" H% `7 v
而默认配置才0x4000、需要改大。" c( o# |: n" x& F3 \

( L! G, Y9 K% _5 c, c8 g' w
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
* M  H$ O2 L4 v# T9 A0 GProgram.heap = 0;2 V' Z0 X% ~. E4 U1 G5 V
Program.argSize = 100;  /* minimum size */
6 V. y  c1 K/ C& E  X0 H2 zProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-24 12:49 , Processed in 0.042410 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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