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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构; b# Z6 g, ~4 A8 D8 e' L/ M" x
0 [. R- a+ J6 V1 t, v
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256, ?* h! R% [& B( y

5 {- A3 v! @+ K- f6 e) y其他程序段。。。。。
! p0 |& V' a/ k( E. ~( `/ D 3 U5 [/ i( a* n! d) g/ p( q
   free(x_d);2 j4 G( T/ d! x4 s" V4 o
" l" {) z+ d$ m9 b8 c9 J: L6 ^% c
使用DSP侧单独调试功能,验证动态申请没有问题,) X* W" ^1 a7 Z' {* {
1 n. f: }  ]) d- h( l$ ]% ~. p* M
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
7 a1 b- L6 I8 S/ u6 ]1 b

, y, _3 Y9 Z/ X: |$ a
; n4 W2 @( P; E! g0 F; H
' T* s/ c5 ]* M* ?
6 E) ^* d) _6 {: F% s" W5 G3 S, D9 z* {/ |9 t
  O* B7 T3 P! {+ Q( t- b, m
- }! H4 g7 M  x4 h; s

4 T$ _/ F" u6 i0 U; u" F4 E( A, `  N

! N1 Y, j( n# c; E* A
分享到:  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 */7 {! @% H$ V/ k$ P
Program.heap = 0;
3 D& P' a8 g. ], `: `Program.argSize = 100;  /* minimum size */
, j, _8 D: X2 ^8 f6 QProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */9 v+ L1 d! |( [# O
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');! z+ C$ ]" K9 a. ~5 n
var heapMemParams = new HeapMem.Params();
* g. [3 R) x4 q' mheapMemParams.size = 0x4000;( d7 D& B% y" Y8 X
8 g2 R1 z7 l2 u) `3 y& c
var Memory = xdc.useModule('xdc.runtime.Memory');- x  f+ _( I5 S" q
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
' `6 t9 j3 O" s
' K! B- w  q5 V5 A% p* |我大约calloc  每次共计大小为5K*16bits,
0 ]5 ^5 V; ]* J+ b而默认配置才0x4000、需要改大。" s; y5 b/ _; L% @" c! i0 {: @: r; `

2 [+ [5 G% |: Y* b9 {
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明
, V% t1 E# m4 _) ^# h: _7 G我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下0 X2 S& C* v1 b3 q/ H2 ^
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
9 K$ }6 A6 V' P. H- e

0 G, d* t1 }) @: y2 M# O5 ^是不是需要在DSP.CFG中进行配置4 s. z! \' L+ c5 L5 j
我现在的配置为
$ g. a4 m3 ]8 ?; D3 M7 ]3 @
. {# M6 Z; ], R& h* `2 Q& s( p/*
+ r( {' I3 h" J$ s* P *  ======== Operating System Configuration ========/ S5 r: ^7 E, p9 v3 L) L
*/( u% Q2 S. p) x* l1 ]4 d$ Z
7 c; C, C3 n7 B# {! [) J# t9 j1 {
/* no rts heap */3 W! }9 c! a% ~1 N- V
Program.heap = 0;! V: Y4 X' w; K( n
Program.argSize = 100;  /* minimum size */
7 b' K' M+ ^. k/ E8 uProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
$ S! F0 R; c+ Q( O) ?- h' z5 ^& e, A2 v$ W( {4 j, ~6 K
/* create a default heap */8 E  A6 m: {/ e$ C+ g4 ?% G
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');2 H" M# S2 N6 i# D
var heapMemParams = new HeapMem.Params();2 h. E2 W9 c8 P  E/ P# `6 Y
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
: S! d4 D8 x" X: n; }6 K8 K# I8 y' p$ q, P7 o( ~: z8 |
var Memory = xdc.useModule('xdc.runtime.Memory');# v! _9 O& ~/ ?- T# a
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
$ w( J* `' w* p+ U
4 |4 N+ l( h: J& c' J( F# ]- f/* configure System module */5 j7 o: X" c' J& [7 s: i
var SysMin = xdc.useModule('xdc.runtime.SysMin');
! D( |2 L2 N# L2 kSysMin.bufSize = 0x1000;
' q# R& ?$ f& p7 d' i, S9 `  S0 YSysMin.flushAtExit = false;( S& R* T# ]3 s2 \/ j* ~1 p& `! s- B
) V# V8 P0 y8 G2 G0 V
var System = xdc.useModule('xdc.runtime.System');
% ^  Q; T% F$ e& p, J% OSystem.SupportProxy = SysMin;
* F- j# Y; |4 J* x& [5 q3 V  D3 N" M  P+ i3 W* w
/* configure SysBios to use the lower half of Timer 1 */
5 r6 V* H; l+ v9 P* r: |* hvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');/ J3 ]) q$ e. w, X4 U1 [5 }* r
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
5 p3 q! B* R4 u' I) p: a9 STimer.timerSettings[1].master = true;5 @# h3 L) G9 T" e
Timer.defaultHalf = Timer.Half_LOWER;- h* q7 K6 D, D& v
Clock.timerId = 1;, ~4 a) b+ O# D# t4 G1 U( A
1 M5 s1 {  n5 a, t. [
  D' U7 {5 B! @
/*
- _0 C' {" h& \$ l6 `3 n1 v *  ======== Miscellaneous Configuration ========, [# R) j; U1 y1 A- f8 n( r- T7 n+ W
*/0 r1 E. t6 H* Y# B3 t5 W9 o( \2 K

1 L9 A* s( @- N/* set default diags mask */
  j  w1 W# }& Zvar Diags = xdc.useModule('xdc.runtime.Diags');+ o# g8 ?, N- Z9 R6 b9 i- u, w
var Defaults = xdc.useModule('xdc.runtime.Defaults');
  n& ?7 x' d/ v" k) R# b, n; D+ B2 {% ~
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
& d, ^" r, `. O9 H0 dDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
+ \1 [/ W# A- O8 a8 I% S% {& mDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
& t' f# o; t0 `, C. {' l) U; WDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
+ v% h% z1 K7 ~Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */) v0 X/ g8 s# b2 ~" Z
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
8 x2 _# H1 J5 U; a/ RDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
6 J+ f' [6 h' e! t& [Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
  N" l* e+ t9 ]Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
5 ~) q2 Z& W9 r% ?) P% A4 i4 [Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;  b" `8 P: j- M( w: ?5 e
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
, R3 L& O" n  ^+ D) g. J" u; lDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;1 N: X5 I* ]8 H+ m# v# p
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
% y0 G. S6 y. n  Q8 o! VDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
! K- T1 K) f: n7 y$ i
  s; @/ T5 `& \/* override diags mask for selected modules */. s! A# C7 o7 R8 L- _
xdc.useModule('xdc.runtime.Main');
% S( A  d& B! J# O& V5 ~Diags.setMaskMeta(
$ k  ], }! Y! g  F    "xdc.runtime.Main",5 V4 q6 U9 K& X" [
    Diags.ENTRY | Diags.EXIT | Diags.INFO,; _3 T* u# b2 e, p3 \
    Diags.RUNTIME_ON9 P# @7 s$ [7 H0 |7 W) K% ]
);
8 @9 z1 W/ A6 C. J3 v$ L. `" q' H9 Z+ N/ p* m5 G
var Registry = xdc.useModule('xdc.runtime.Registry');2 v; k2 ?, e( _9 y9 N5 F
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;* u- @3 Y' Q1 O8 Q7 p) X% k
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
2 _" \- O- q2 e2 V; k3 kRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
3 E0 g3 a/ C+ f) a- x9 N) J! t7 S( pRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
7 G- W  V, c* H8 {3 L5 y* @# \& r2 y
/* create a logger instance */
0 B7 S) l4 R# q5 gvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
0 _. e. X3 {9 c% ^& ^" b6 a+ Cvar loggerBufP = new LoggerBuf.Params();1 m4 O$ q" W, N& T% B: M  O  d$ l. E
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
: I/ e1 z6 e1 g  floggerBufP.bufType = LoggerBuf.BufType_FIXED;- w/ y8 e) X2 p$ ?5 c3 p1 D

  s2 P7 V; F* A8 U1 F" b: [  Xvar appLogger = LoggerBuf.create(loggerBufP);
' L* v5 o4 W2 T+ e1 E( JappLogger.instance.name = "AppLog_Core1";
9 `% T  P: k0 f' d2 _, sDefaults.common$.logger = appLogger;6 x, Y! ~* T7 o, |
Memory.defaultHeapSize = 0x8192;    + l5 e' i0 O/ f, h& f6 S
Idle.idleFxns[0] = "&LEDStatus";, S6 `% y! d0 t" x1 k
Cache.initSize.l2Size = Cache.L2Size_32K;1 T0 Y. Y0 f9 p

) `! X- `. `- ^
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-12 17:13 , Processed in 0.043520 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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