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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

. D, Q8 r& f& `6 S" `    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
- R# g( E! G+ {1 V+ k! e- J+ R- i$ r% O0 h* w# a* I
其他程序段。。。。。5 C: Q( ^" x2 A# f. r, I' q- X0 D

; L+ \* j# U. z/ S, `* l   free(x_d);/ u* h) `3 ?' [# H) V2 t0 P% z
* z8 v5 _7 X& A7 U
使用DSP侧单独调试功能,验证动态申请没有问题,& d& P8 o" M3 C' G
" K3 r9 W' c! O. E
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
5 M+ k$ I! \4 V0 O
7 o& R! t; Y. x- A9 D
0 }+ G% [# S) e
) A( Y5 R  j/ w$ u! q
- Y8 H; G5 Q; {9 @2 d3 U* _
7 i) }; c! ~( A& p
# x( W3 y6 G3 L: D

* `, e# T* R  Y; u9 W! b. V( l% m! W7 C1 P
: m) e" J' [. [" n" D2 N

+ ~: V5 A5 j* I( z8 `$ R$ G7 N
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */  j% X) ^& E( d
Program.heap = 0;/ Q, m9 H) c1 H  c5 T. t
Program.argSize = 100;  /* minimum size */
  f& O8 u( W9 _. m( E7 a  {Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */' G/ s9 G. U" {, M) C( R* Y( R
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
! J! D* t4 W# }5 D0 z3 V: |var heapMemParams = new HeapMem.Params();
$ w- W% K# N+ F8 C! w% nheapMemParams.size = 0x4000;
& U" H+ J8 O2 Y+ Z0 C6 T7 `
& G* m# I) Z, rvar Memory = xdc.useModule('xdc.runtime.Memory');
( ?9 L$ M, A% w. RMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
% V+ F1 L4 K) z0 ~8 o& K0 }1 l7 ^% C8 F6 f/ Q! l1 D8 C  j' [
我大约calloc  每次共计大小为5K*16bits," V; k, h6 C. e
而默认配置才0x4000、需要改大。
3 x, G7 j0 ^2 ?0 O; y
. k: E; w9 M$ `' {8 v7 W
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
3 t7 j4 d! [: o4 U& x7 [我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
! s$ p7 A! s8 ^! B(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
( F  q. J2 U9 e3 ]9 o

' h: K4 M' [- x1 T9 [是不是需要在DSP.CFG中进行配置
$ J- o* i8 D9 N- c' S我现在的配置为2 Z! P+ F; E, X$ T

: d" k9 d) d% \( }/*
8 ~+ k+ ]  l4 C; W5 w *  ======== Operating System Configuration ========6 c, P7 a5 r+ L
*/& j. z' @( y! {$ \% z+ c

5 S1 H) x: h6 @. Z/* no rts heap */' u& j. Q! d- w7 l
Program.heap = 0;
3 E! v& }; j, I- y" H$ Y3 |Program.argSize = 100;  /* minimum size */
% p  W+ L) [3 ^2 F( NProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
2 L, O! l$ |, y" |. Z6 s8 S, |' u/ z; q+ U. V+ X
/* create a default heap */
& D! i2 x9 a/ `- a6 d5 f' kvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');5 Y5 c. r! {8 N
var heapMemParams = new HeapMem.Params();
* t% A0 b" w5 l1 z, RheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大- V6 [9 |! r( L" ^# v: T% x

: ]9 p4 Q& ]$ f2 N
var Memory = xdc.useModule('xdc.runtime.Memory');2 a5 i$ {$ R& ]9 F* b- U; U3 ], A4 H
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);6 q: F( D, @5 o* }( ?
3 u( \4 L* o0 M, ?2 b8 n8 x3 _
/* configure System module */
# X, H) M1 u* e$ k9 Fvar SysMin = xdc.useModule('xdc.runtime.SysMin');7 z  R2 o- y! w7 w3 I% v; K
SysMin.bufSize = 0x1000;/ C6 u- Z5 g5 L9 h2 y$ V
SysMin.flushAtExit = false;
/ y) H. Z% q) r2 ]4 r2 Z$ T
) W" G" N1 L6 yvar System = xdc.useModule('xdc.runtime.System');
( U) G6 S2 K! E# l. kSystem.SupportProxy = SysMin;
5 ?7 ~4 j8 w8 v, x0 t, h& X% t& I+ d; I3 K7 A4 h# r
/* configure SysBios to use the lower half of Timer 1 */" t, F% |- Z9 H/ C6 Q0 H
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
1 w5 E* Z- v) y3 y! i4 U3 Uvar Clock = xdc.useModule('ti.sysbios.knl.Clock');( \% k4 c* X! U7 {; f0 s
Timer.timerSettings[1].master = true;" j( ]5 q! Q/ j- x* B  v( A$ l
Timer.defaultHalf = Timer.Half_LOWER;$ R/ }" w/ y/ _: D
Clock.timerId = 1;' O- S2 I9 s9 ]! D. h  L: Q
1 m( _, U8 J; V- k1 g* N7 J5 t; l

* t! Y# I3 Y. N- H1 O/*
2 q! M  Y# B5 W% z. W# ?* l *  ======== Miscellaneous Configuration ========- r( N5 t9 A4 x5 k, x. ~' p, w) \
*/
4 L3 n0 t$ n2 T) d1 R% s7 L( k
  A; x, K. K  Y% a0 z+ P: N/* set default diags mask */
5 c* v& v" S# X) _0 ~! ]var Diags = xdc.useModule('xdc.runtime.Diags');
; C5 X$ N1 T0 z3 H' @. evar Defaults = xdc.useModule('xdc.runtime.Defaults');
# G) X8 d. m* v( [- |
3 S2 T. }7 S  X8 RDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
- U: d) b$ y- jDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
7 {9 l6 x+ _$ T. T" y$ K- ODefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;) l4 C( Z- m5 m7 M: d3 j& w
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */# A" D5 j5 E' p
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */' o' G. ^) ?7 q$ I) j- U
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;- m. a0 `* z! `0 t; E# [- V* Q+ B
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
8 D9 h. Q5 S; wDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
3 j$ b: M! X" f: n* N- ~, I3 }Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
9 x) V( n6 Q; pDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
: o% h5 C1 Z3 b# [1 bDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;' N  ?! h! ~6 T( _
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;, s$ W# q2 ~6 F+ P* k
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
# l+ J6 A( }, J0 f8 xDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;8 M5 @2 i* k1 a

0 f$ L/ ~* D" @/* override diags mask for selected modules */
  U/ P8 t" M1 A# nxdc.useModule('xdc.runtime.Main');& k" Z/ C9 [4 \7 |
Diags.setMaskMeta(2 o/ N3 b& ?% s" m& G
    "xdc.runtime.Main",
- H5 W  R- N4 C- J' F& Q9 q    Diags.ENTRY | Diags.EXIT | Diags.INFO,
; o* J9 j8 C. X4 q% o' h  ^# W. {    Diags.RUNTIME_ON
4 V' N8 s+ |' S& [);6 ~5 q. r; I4 b" e1 W# l$ q( M5 D

5 Z! s6 V' `9 Jvar Registry = xdc.useModule('xdc.runtime.Registry');
1 T: Z- J( |. j, Z2 b0 z" TRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;$ b4 ^: F7 }2 E# {% ~0 ]
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;1 O+ D$ y. s4 e- v
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;- f+ L; D8 B& s/ \
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
7 w4 K0 t1 c7 [9 v4 ]& Q" f- c5 |9 Q5 i5 c+ H4 P
/* create a logger instance */
6 ^( r4 D# H' l& ovar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');+ X& D/ c  H7 C' S+ t
var loggerBufP = new LoggerBuf.Params();
/ p& t5 _  a* n+ v* \loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */: N3 Q( z* D+ Q, t6 ?5 `
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
- A* v/ a, l$ `$ @; j1 ^! u8 R( a5 J& m8 z: _
var appLogger = LoggerBuf.create(loggerBufP);
: p$ q5 Z' F8 _) h) nappLogger.instance.name = "AppLog_Core1";
4 b2 `# A- c/ `6 S  `& [- yDefaults.common$.logger = appLogger;0 M: U" P- y: ?- M2 P3 a
Memory.defaultHeapSize = 0x8192;    + s, r5 C4 i, {) R9 q
Idle.idleFxns[0] = "&LEDStatus";. E3 }5 E. C/ D/ m0 g3 g$ f  l
Cache.initSize.l2Size = Cache.L2Size_32K;
5 }" R9 q/ Z% ]* M
0 `( J- ?7 @* c* J9 S/ \
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-12 11:49 , Processed in 0.042421 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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