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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
3 Y- t. z( p6 n  ~9 F1 r, f
+ d3 `/ _9 l0 I! o: y    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256  L1 B6 _" I" o( U8 z
; I( q5 ~' c! n7 c( C8 o
其他程序段。。。。。0 g# t& v3 Y* B% m

0 z; m" M& _! ?* y   free(x_d);9 Y1 E+ P0 C3 w( h. A! h4 e  e4 A* L

( A5 a! h8 Q* o: }0 ^使用DSP侧单独调试功能,验证动态申请没有问题,
7 R2 `. |; V+ B0 k0 _& ^) x
0 d$ I, r- K, U3 V但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
+ T" m' u1 [+ R- T! X- N  P
; N- b# y$ M7 c. {+ g* [* C

. S; j) e. E3 [  I" O2 A) K; k; P) }$ u
3 w9 {3 c6 ?5 G( S$ ~9 Z
% N" m5 b3 L6 M
7 a' Q2 d7 _( `% d6 E1 b4 S
6 {) B) s2 ]# J4 E2 p

) Q! ~. ^& M* y( v9 B2 F. m9 I4 O  X" I2 k# j: {
% C) |) p4 B6 l9 q" c: v0 K: b5 R
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
& u: A9 w& C  }; E) P我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下, e  F6 H" R; U3 x" }4 P. u
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
$ T8 \% u6 c3 [2 p' V) y8 x5 w
, m' ^  m% ?8 }! _5 s% U
是不是需要在DSP.CFG中进行配置' g6 N8 [) M: l% Q. E
我现在的配置为
5 t2 ]* J) e! H$ x* j
4 L4 j' w) I' \/*
4 y" r3 H. I% D( w5 G& p. m *  ======== Operating System Configuration ========
( m' c& Q( T- B6 t */' H, S% E6 J' ?: }# }! o+ U
5 P5 ^6 M  x& c9 Y6 c* l) S
/* no rts heap */" {9 c, N4 M* m5 t- m# _( |
Program.heap = 0;5 C) m3 Q) I, q0 `0 P8 [
Program.argSize = 100;  /* minimum size */$ s9 C0 _+ S1 ~$ y$ R& C
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大. ?+ K. M# [3 Q3 ?7 |8 v) x* m$ h
* x( X' M  _4 ]3 m2 X
/* create a default heap */9 m5 y6 ^8 r' M: ~, y- O
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');0 ]+ i* D( C  B! G( e
var heapMemParams = new HeapMem.Params();
$ U& [- ^+ q4 J# g5 }& P8 theapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大* E6 k- b) J  d& d

7 Q: \# y6 Z5 f$ ?
var Memory = xdc.useModule('xdc.runtime.Memory');1 C. i/ I) O* l$ s; U
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
3 \8 c$ i7 q# ^( l; D( O! ]: R
  d# T! B9 T: n0 |/* configure System module */
- V- [( {3 k2 v  J3 qvar SysMin = xdc.useModule('xdc.runtime.SysMin');+ S' Q; E. ^( E7 l7 w( [
SysMin.bufSize = 0x1000;
; R  \8 j8 C2 l5 USysMin.flushAtExit = false;
8 \7 ?+ \6 N# q) ^; l! R' v6 P% |" b( p/ c
var System = xdc.useModule('xdc.runtime.System');
# M7 O) F; ]+ l' gSystem.SupportProxy = SysMin;
; [$ f% L5 L$ ?2 N+ g! l. S
, ]" `! P$ H. D" N: k" U) {: T2 h/* configure SysBios to use the lower half of Timer 1 */
0 S0 m2 @; e+ T4 |4 K4 g: s+ E8 Z2 Ovar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
- z; Z, `8 b, z* gvar Clock = xdc.useModule('ti.sysbios.knl.Clock');  w: L" c% I- Q$ ^5 y: b. }$ q
Timer.timerSettings[1].master = true;
* v+ c0 ~: @4 E$ V, ZTimer.defaultHalf = Timer.Half_LOWER;
1 d1 z% x( y4 [& f/ ~7 _3 EClock.timerId = 1;
+ `+ j) j. d/ g% a( N' z5 b  y6 H* m6 @) Y

! e3 G1 j' ?9 s/*
9 i- Y- Y1 A" R! ` *  ======== Miscellaneous Configuration ========
  ]; R6 ?5 ~3 D */
% f* r) t/ g  U- A4 T, N7 ?. R8 }9 Z5 H% D6 X" [
/* set default diags mask */
$ j+ @0 X0 l( S+ [! ^var Diags = xdc.useModule('xdc.runtime.Diags');  j4 a. c8 f* w2 p
var Defaults = xdc.useModule('xdc.runtime.Defaults');/ i9 p% e0 y( R) _6 I1 A8 |2 T
" c0 q- q; q7 n$ q
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;9 p+ Z: v$ O* @- V
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
9 m# }: ?! d0 `: e  Y& k  SDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
8 i' [  A) o, q  x0 WDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */5 T1 S6 r+ L$ }
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
$ Z# s* s. }$ y; S9 ?9 a5 d( ?Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
/ @. c+ ^! d  J; v2 H$ VDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
! }. J+ D  _" I, Z! EDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;2 E; e% i6 n/ }# b7 r( Q
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;2 }5 G! C0 e' o
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
) l7 f1 I  \& |; nDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;! m4 y3 @  j, L( [7 q
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
1 m$ G" ?7 N, Y+ S8 ~0 b# ~% KDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
1 w% u4 a; n7 B$ k2 lDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
& i8 f% K$ A4 O8 z  t! T6 D) C
% c  E+ Y6 {: u4 A7 C2 y/* override diags mask for selected modules */( \) [5 U2 m4 Q
xdc.useModule('xdc.runtime.Main');
" r; N% H" H+ P0 r3 z1 L. GDiags.setMaskMeta(3 r( S) s- b3 u+ Y" i2 J+ m$ s
    "xdc.runtime.Main",
- G  q& F* ?2 g' \( v: E    Diags.ENTRY | Diags.EXIT | Diags.INFO,
: X  T: E, d& u7 ]/ ^: H. Q$ U    Diags.RUNTIME_ON
$ K3 l& A0 \1 l4 G& Q);
8 l# _1 g* \0 L- \; e# j- l$ v  N- l1 S* b- H: Q/ q
var Registry = xdc.useModule('xdc.runtime.Registry');3 v# h9 L! r+ J, R( w, o
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
$ C# s" g$ B' H- [# Q+ CRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;0 p' z3 c% i* L: ]) _* K
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
8 a5 l1 j9 @: sRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
; I2 R5 Z+ ]: L. }* _/ d8 l  R+ x+ z  L
/* create a logger instance */6 t& f* c( c& P2 ~
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');+ N3 O/ R! B  h3 o& ]+ W
var loggerBufP = new LoggerBuf.Params();+ ]( H: U$ C8 X: N; J- p5 r* I6 T
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
# V8 c' ]/ c0 r/ a1 V# EloggerBufP.bufType = LoggerBuf.BufType_FIXED;4 S; |# G9 n+ \! Z9 W( d6 r5 _
5 w# C+ z* z. ~. M0 G
var appLogger = LoggerBuf.create(loggerBufP);
# |1 }" X5 T" ^& e0 nappLogger.instance.name = "AppLog_Core1";: Q5 H& r- p  j8 N2 B
Defaults.common$.logger = appLogger;9 J0 u, D: d* v; w( {
Memory.defaultHeapSize = 0x8192;   
( ^" }. b+ |* O5 o" cIdle.idleFxns[0] = "&LEDStatus";
& c7 ]5 G2 P5 V$ u( {& `8 BCache.initSize.l2Size = Cache.L2Size_32K;
2 f) c$ i! Q! ^" D0 H, j! s; y. d; j1 V- {, O  ]2 j; y# 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 */
. c8 s* v) U, g$ x! `! j6 zvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
' E0 s% O9 w+ `% ]9 h: M* y8 svar heapMemParams = new HeapMem.Params();
4 |# h1 B, r6 J4 Q8 _3 d% E+ IheapMemParams.size = 0x4000;
# s  |* Z& j. w) t, c4 Q  z* k
8 y7 ?, D# {% O# H' }( yvar Memory = xdc.useModule('xdc.runtime.Memory');, P* b- l% F% q8 q# y8 @
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);# x9 @7 N9 n' V# |. C# m# P% F

  }, E( @# s5 q我大约calloc  每次共计大小为5K*16bits,; K5 Z$ }4 j0 Y/ L. P  m* ]1 W" T
而默认配置才0x4000、需要改大。$ i7 T" E0 G/ O4 l# G; w

% h& g6 ]5 y$ p4 L; E: q2 X+ i$ R
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */* B. U& ]2 L9 z$ Q
Program.heap = 0;
9 U9 |- d' e+ ]# v, oProgram.argSize = 100;  /* minimum size */
, b0 W3 T. K; K# A+ i) VProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-19 20:11 , Processed in 0.042550 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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