关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
( Z2 @: r4 Z) B& l  Z
0 |2 q0 f/ L9 ?* B/ q. |    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2565 e* z4 [/ R. K$ i" h
; c9 _; Q& O+ K' X
其他程序段。。。。。
) [, M0 i- c# a) Q4 d( k) [, Q: D1 q 7 L! }2 w# y1 K
   free(x_d);7 g, W/ `) }. R+ v5 G( H, N

) D3 K8 L+ b& ]1 m% m% @使用DSP侧单独调试功能,验证动态申请没有问题,
7 _! f# b7 f" K3 K) P7 O! `0 P: ~( M4 X3 M, i6 s5 g+ t( R
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。' A/ p* u# k  [0 k( l9 p" R3 j, V- B$ M

' M6 w9 s, Q0 m- k0 Z" c$ Y' t3 N2 T! K0 D$ v

8 p# ~+ u2 U9 n
) k2 _! L6 T' ?9 J* b% ^+ O% i8 V0 i0 ?; s3 G8 y
2 o! x: p9 `& w2 ]* J4 _7 M# K
+ d, i4 T4 {+ y3 B

6 V: w" h$ x5 z8 S7 B" Q! E; r7 G. G7 T

2 k; g) _+ A4 K( x" l
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明' Y0 ~2 r$ |& m9 j  J! u7 E
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下8 A: q% j( o0 U* Q2 G
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)( y, E, x$ z2 X7 S/ `

4 U3 [' y8 U$ _是不是需要在DSP.CFG中进行配置
+ r4 B5 U. K) e我现在的配置为+ W3 h& c" H: A& J3 G

! _, S4 }. y  |/*' _3 ?4 F& j7 q  ]) {5 C
*  ======== Operating System Configuration ========
: N% c/ I0 u3 c0 m& {/ m& z4 { */, I* z" \( A. @$ C6 @- c% ]4 R! u
9 C! f4 G! G/ ~; q
/* no rts heap *// a; n8 L0 B& v5 }0 L6 p* b- N( Y; C
Program.heap = 0;
8 U( z- V3 G/ Y- `$ DProgram.argSize = 100;  /* minimum size */
$ M( l  F1 r1 \: G3 o! AProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
- j6 s2 p7 o+ E6 p9 h9 L
, }& o" {9 t5 G2 y. Z/* create a default heap */' F! J  `, u, E; w- |9 p
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
) o; V+ k7 O3 J5 @+ ^" ^7 Zvar heapMemParams = new HeapMem.Params();6 e* S! F: d: m9 y
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大% N7 p3 }8 a/ q! a+ }2 ^6 K5 j
* W" y' Q* r9 S9 b
var Memory = xdc.useModule('xdc.runtime.Memory');
5 k7 w$ d4 ]6 a; i4 C) EMemory.defaultHeapInstance = HeapMem.create(heapMemParams);& n. Z. C" m1 e1 T" i' D

, [3 P8 L; p) P' J/* configure System module */
) x: v( b" J; h5 @1 Cvar SysMin = xdc.useModule('xdc.runtime.SysMin');0 P- j' W$ X# {# m% S8 A
SysMin.bufSize = 0x1000;
( ?+ t. |, R) x+ \( Q- eSysMin.flushAtExit = false;1 M7 ~+ H6 d% i+ L+ Q

. N- d1 \9 j/ g6 J# U0 F/ wvar System = xdc.useModule('xdc.runtime.System');5 ^7 L/ c/ }( N7 F+ X
System.SupportProxy = SysMin;& O, m3 g( `7 R" ^" e/ V
7 i6 ~( N" k, `: ~1 M1 X- Z# t: w8 J
/* configure SysBios to use the lower half of Timer 1 */
0 M% V, _2 |4 _  `var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');$ |% u( y7 e( s6 H/ Q; N, A
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
9 _% F1 G# @& a" z$ ~. V, t# YTimer.timerSettings[1].master = true;: k1 k. x! t8 _3 E; C7 q9 T
Timer.defaultHalf = Timer.Half_LOWER;  C9 e- E3 M: @; Y% a9 x
Clock.timerId = 1;
0 x0 }0 P# n  T5 O
9 A4 g7 a) l" |# W( ?! @# N# e: H4 |& p- v/ `, b, o& `
/*4 H& P1 l* ^+ O" b( E
*  ======== Miscellaneous Configuration ========
7 v% g" w; Z( m' b/ a' I: A */+ @9 G3 c0 u2 t: e) O
. X) f( _. I( k/ V+ `
/* set default diags mask */
7 N% A' r9 ~& D# U1 y( ^var Diags = xdc.useModule('xdc.runtime.Diags');6 T& a7 @7 R$ b
var Defaults = xdc.useModule('xdc.runtime.Defaults');' G5 h& ]3 p; i" N1 q' M" V+ v& [
/ T, B0 B) X0 N( {% o% L, H* Q
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
0 {  @! y# N0 @. }, E) mDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;0 O4 M) S7 L2 c' ~5 C+ `0 J
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
5 I; ~$ x* {, ADefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */, {. l# u, [. n4 H' u
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
7 X; T; U2 P6 n, j$ X  TDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;* `  {, _8 D8 S0 ]
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;1 q, x& X( Y, z; z+ D6 ]/ N. n# w
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;1 ^, U) S8 w; {" R+ F0 h) e
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
( @& y9 a% h, u' j: Z, _3 FDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
/ f, x, J! `; S) r$ fDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;2 n2 z3 R$ b  ]) m! Q
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
5 t! a6 ~. b2 C; v6 k, q+ gDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
# f: m4 G% z3 v9 K3 JDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
( |  s/ |! T* ]5 Z8 Z& ^) i0 y9 e; @& c
/* override diags mask for selected modules */
+ L$ j* a! A3 t3 V" W/ @3 ~" Oxdc.useModule('xdc.runtime.Main');* i  `4 F( A: P5 H! ?
Diags.setMaskMeta(
/ Z' c! t5 |) Q' r1 N3 Z2 t! F    "xdc.runtime.Main",
- i+ b" t; R6 F! x! f1 g5 p    Diags.ENTRY | Diags.EXIT | Diags.INFO,$ S  l  P* |% R3 q: w
    Diags.RUNTIME_ON; P  b9 R- P; d7 m9 H9 @+ U. K
);5 R! Z( N' J0 ~
# I5 H1 Y( X& Q0 c% n
var Registry = xdc.useModule('xdc.runtime.Registry');. c5 @5 v- @2 N% y2 E$ ?* k6 }8 G! N2 z
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;2 z) I1 E. e7 f; n; P: Q
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;) X. i+ k* p: K; F
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;' P0 V+ b+ }; U# I+ D9 i
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;3 D' m7 n9 K* h: k# @) `
' J) C; I, P6 Z! f9 v
/* create a logger instance */* T: J  C/ r% F& w. H& D; c
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');1 I& V- G! ]3 o7 G
var loggerBufP = new LoggerBuf.Params();
6 Q7 |4 L4 ~6 O2 o5 AloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
0 e7 A0 R5 B( A' H2 E! o1 FloggerBufP.bufType = LoggerBuf.BufType_FIXED;
( |; O$ ~$ B0 U7 p5 {. F5 i* A1 t
var appLogger = LoggerBuf.create(loggerBufP);8 t: w1 `' h- n+ x5 ]
appLogger.instance.name = "AppLog_Core1";
% l+ O' F9 A! f# w! n( nDefaults.common$.logger = appLogger;
9 w8 X7 k# H& b: FMemory.defaultHeapSize = 0x8192;    ( U: t+ i2 h6 ~1 r/ |) _
Idle.idleFxns[0] = "&LEDStatus";+ n# G. q# x# `: I3 ]# T  ]
Cache.initSize.l2Size = Cache.L2Size_32K;( n5 i6 Y8 h- D$ z1 @) z
4 K) Y1 A, d" l3 S! Q1 {8 n
回复 支持 反对

使用道具 举报

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 */
& ?8 y; y3 Y  n7 U3 P. A9 vvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');! K0 O/ R; y* {( v! L3 g
var heapMemParams = new HeapMem.Params();! c4 z* q! H- n3 J$ b& i
heapMemParams.size = 0x4000;. b6 c" P- {1 S  G) \
$ ?6 ^4 d+ o; J: P5 i4 s5 i! ~
var Memory = xdc.useModule('xdc.runtime.Memory');
6 m( p3 j! }# M0 W3 [/ FMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
6 H. B3 P! b+ o3 i6 _, \0 V& n) e. m/ H
我大约calloc  每次共计大小为5K*16bits,
! j) `2 c, x# T' |而默认配置才0x4000、需要改大。
5 m$ M) H' @9 i) Q, E" N
- p: b9 k! C/ ^+ d3 r  K, V
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */% c+ B8 e% P  i8 m4 \9 F# N
Program.heap = 0;
9 F# _/ J- W2 [/ |" P0 w) M2 X1 KProgram.argSize = 100;  /* minimum size */- O* C9 v3 @  W2 }, t: U
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-3 18:47 , Processed in 0.045817 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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