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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

- B( K4 U5 A/ x7 C8 C# k6 l    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
3 n& H+ A+ {* J9 j' i8 G1 h% ]- q. v4 n0 h0 h7 u* G1 @9 L& G
其他程序段。。。。。8 ?. n- E0 F  y3 ]
* U* V/ D4 l7 p" s5 u/ Z: S' K
   free(x_d);
$ r3 b4 Y4 A8 ?* m8 P5 h* A0 N0 m* ^6 j) M) X
使用DSP侧单独调试功能,验证动态申请没有问题,
4 `& r5 x) k! ?
0 z7 }- g7 T* X. Y但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。# t* e6 g( ~7 v% v! j# R- w

+ L- p# I: L3 g" J9 u2 D
3 ^. w0 _; h7 S" a9 a6 ^  T' g5 K( Q, N2 o, n: y* t

: {3 W4 C! A; g7 w0 C% Q9 z& ?
8 f# d+ h( J! m
& I: u: P% a# T" C* v, z. V' r; @" _: Y

  B- m  `4 R) _+ \# o; |& j# d8 x! r& m; w

1 J3 b& ]3 M  N7 q7 j. [- g
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明/ X8 k7 z9 Q" l6 }  k: ?* V3 N
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
$ L- t8 }6 z1 p; Z! ~' i8 V7 O# `(不过疑惑的是,为何单独DSP仿真就没有问题呢?)# k# }5 H+ a; l7 k9 U/ s' ?

$ N! e3 \+ B' R是不是需要在DSP.CFG中进行配置/ [. d- n" Q* u$ q* ?7 V
我现在的配置为8 w4 P, e  J  ]9 {: F
: a. T# T& z9 v1 f1 a% G
/*
- @5 J+ J9 z7 I8 t- F0 k0 ^ *  ======== Operating System Configuration ========8 S0 U+ a' C6 i7 X. L% l- w+ P
*/
$ w' a$ e7 |5 r* J5 L' ^3 Y# D+ H2 Z3 i2 H
/* no rts heap */
" N9 {( u. l& x3 _Program.heap = 0;
; W+ O& y8 c6 H. d- `# Q, mProgram.argSize = 100;  /* minimum size */1 E* ^) m8 N7 I8 b1 }
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大8 a) \( C; e2 s7 {5 _

9 [" R- A7 }9 s0 p7 Y- L& Y/* create a default heap */
6 k3 C0 h1 c5 r; F, kvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
9 H9 Z2 |5 Z# q* a0 ]: A) mvar heapMemParams = new HeapMem.Params();6 ]( p# i# W2 S  Z+ e  \8 S" u+ S
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
' `) T" v7 l! m
- o- b& z. i/ t5 m" A* ?
var Memory = xdc.useModule('xdc.runtime.Memory');
1 M  Y6 k# ?, W1 _& _Memory.defaultHeapInstance = HeapMem.create(heapMemParams);0 L" y2 N9 J7 U+ l9 j& |, J/ T7 W$ @
+ O! l. a$ _( F. ?* C. F
/* configure System module */4 H* V+ J/ S/ T# G/ U
var SysMin = xdc.useModule('xdc.runtime.SysMin');
7 h) ?' ~. b. h# ]$ u- M8 VSysMin.bufSize = 0x1000;. K. _& M  c: G) g- l  G
SysMin.flushAtExit = false;4 ^5 C+ f0 `: y" I. y# J) S. l4 C

! o" v1 \: z. h4 j# O4 nvar System = xdc.useModule('xdc.runtime.System');
5 N# W/ X0 w3 [. q" kSystem.SupportProxy = SysMin;% c& N. a$ `0 l7 y3 `% G! i* N  m

: O: b1 Z  _/ h: @# x/* configure SysBios to use the lower half of Timer 1 */; {' A3 E& ~. E, e; {
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
' x/ ^* A( }2 L. c. ~6 Mvar Clock = xdc.useModule('ti.sysbios.knl.Clock');" ?& z0 ~+ |0 `# A
Timer.timerSettings[1].master = true;
; c" D  }% [7 p; n" H8 x* C# x% QTimer.defaultHalf = Timer.Half_LOWER;
4 N  z- n6 i; ^% SClock.timerId = 1;
6 i' x" y3 F! I4 T' {, v  O/ }% D4 l" D, k# i/ j! x

3 q- ^6 Z5 E; s  w- g3 m# u/*5 K. j; h1 \2 W0 Y# r
*  ======== Miscellaneous Configuration ========! \6 {' v9 N# u% D( o& e
*/
+ f. d% `/ j8 z* y$ k9 B5 n- H7 p8 I2 f* A( u
/* set default diags mask */$ O( {) B" P" s1 c, @
var Diags = xdc.useModule('xdc.runtime.Diags');6 B: [9 x& n, X/ K7 _& n
var Defaults = xdc.useModule('xdc.runtime.Defaults');
9 K+ x$ F/ ?0 F/ x3 u
# r9 w8 j1 ]6 F* O5 T/ W3 r( p" E1 NDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;/ s3 ], I" s' p; B* s5 A" i
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
5 c# _8 y" c. iDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;3 J; l2 B6 O+ e5 G: c& e
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */. M2 z8 |, I$ l5 q7 x* Q! T. F, E
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */1 P: |0 M8 ]6 Q" }4 N+ l9 }* U
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;6 e1 U) I+ `5 e/ E
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;1 `- k" f5 b  q+ v' [4 c/ T' v
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;3 a, [4 I& X! {. P6 e" O- H- q
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;  K/ M2 ?+ L" N, W8 l0 S/ k' Y
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
- J: u' T  E: ~! HDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;5 Q: M" K; [' b0 i9 F9 t; J0 x5 ^
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
3 s3 a1 @# }8 `8 P; XDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;# i. i, {0 Q" \) e
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
9 o0 `  d- W0 H- A5 U: |5 ?
$ ]* W* y: |4 n6 W8 x3 l/* override diags mask for selected modules */
9 a6 b) ^, E. g2 fxdc.useModule('xdc.runtime.Main');
& J8 @" X& s0 r: ~1 b4 KDiags.setMaskMeta(- N: N  p+ G  n: n6 |6 L0 _8 C4 p
    "xdc.runtime.Main",
# b' o# A5 t1 L- H2 H    Diags.ENTRY | Diags.EXIT | Diags.INFO,4 S  [& d" c( `' p
    Diags.RUNTIME_ON
+ ]4 j9 T: ]' k$ R7 m( ^: o);* u8 V- u9 p( H+ I3 S& k' ~. k
6 {$ N5 b, I! W+ H! p! v) L. s! t
var Registry = xdc.useModule('xdc.runtime.Registry');% J' S1 h) w" D- \6 t
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
& \6 d) y2 K. O& }; iRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
1 x$ j- d  B& t" D% {8 ERegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
8 v' m/ o3 w# ~$ Y, h, uRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;$ @5 U( h5 A  |3 K0 d* {6 q

$ B) A5 M" {3 z* i1 V/* create a logger instance */7 B, E% E/ Q9 o9 \7 w
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');  D! J4 U* T! {) @0 h7 _! l3 D
var loggerBufP = new LoggerBuf.Params();3 |5 p" P& S  a) U
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
- u6 D; q) N4 I& i/ YloggerBufP.bufType = LoggerBuf.BufType_FIXED;
! I% d3 r' M! u. e( F$ N# M" i
var appLogger = LoggerBuf.create(loggerBufP);
3 e3 r1 f! {# q  I' [appLogger.instance.name = "AppLog_Core1";
) Y. e; B2 W* B/ ~Defaults.common$.logger = appLogger;  A- G/ m9 W8 F$ `5 R0 R& B
Memory.defaultHeapSize = 0x8192;    1 i% u$ ^- b5 ]. I
Idle.idleFxns[0] = "&LEDStatus";
) P, W* Y* U6 u" Y7 P& y% lCache.initSize.l2Size = Cache.L2Size_32K;
7 S0 t6 D5 K, n+ \# C1 M& n$ \0 R% z% @0 v; ^/ t  Y, j% U
回复 支持 反对

使用道具 举报

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 */+ w+ ]. R( Q2 R9 `$ v5 i
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');6 S& A( w/ p2 W
var heapMemParams = new HeapMem.Params();
% c, Z! g. l( wheapMemParams.size = 0x4000;# [7 P8 @; v, e, r3 G- _, [
- I- R- X. e! E0 _
var Memory = xdc.useModule('xdc.runtime.Memory');
) X$ C- Q/ B0 u/ CMemory.defaultHeapInstance = HeapMem.create(heapMemParams);8 m( |6 ~* P9 \* L7 @

3 ?3 E8 U$ b  |我大约calloc  每次共计大小为5K*16bits,
0 c# X! `" y. }. s而默认配置才0x4000、需要改大。
- R* w. k4 E8 c( a
( q+ J, J6 y5 B% M
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
. R, }/ Q$ g8 s  k# W' HProgram.heap = 0;' k7 }! u; g4 l4 E6 v
Program.argSize = 100;  /* minimum size */
! E( j3 }$ g% A- T& N1 qProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-4-1 01:11 , Processed in 0.043325 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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