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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
1 A, K2 j4 E; K* H# C2 [) h- E
2 s! r% Q' {% g4 m, u    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
, x. C& |, A$ z
4 d7 S/ x7 K/ T! ^% c其他程序段。。。。。
" V! E$ R. A+ E0 h# Z  _- q) g3 U 8 i* u- Z, M" ]# k
   free(x_d);
& g1 H" M( R2 S0 j  i/ `. W5 Q! u4 z0 S0 ]
使用DSP侧单独调试功能,验证动态申请没有问题,; O8 w* V. m- o) D" K& U/ ?6 n8 B
# y! _; c/ Y7 g) N. k- [# `% @% A
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。: S+ a7 C, F0 o

9 w& v; G6 O5 E( _. u
0 L. Z+ h9 `+ c! S  c
2 _3 X% }( J5 e& ^$ j! [4 m
6 X' j4 Z8 A$ \" |1 t2 m2 z! F/ L' r1 E4 B

% p+ t- j8 p# q5 O. T0 w
5 g$ U( U# b/ H( \4 P7 e5 W: ?) y& P% t) d

' E) g& `8 {/ x7 ~& P
" Z+ U9 z+ g* Q2 ^/ I# P
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
0 l, W# d: r1 d% k我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下# J( M6 g3 ]6 N" v; ?, @: T6 K
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)  A( }. \0 r4 o; K/ W

8 @1 ?# t6 \, Z: U9 a7 V+ C3 Q是不是需要在DSP.CFG中进行配置4 o, M2 |- m! t
我现在的配置为. [( y7 |% P7 o; |! P' V

- G3 }& M/ v) r/*9 d. ~+ y8 R1 `1 }& @
*  ======== Operating System Configuration ========
1 c( M  O% O( j6 t */
" U  V% P8 C' h! z* J/ U* U
+ X3 x, @4 Y! J# H; K5 N/* no rts heap */7 V' T/ [/ y5 O2 X1 r( Q
Program.heap = 0;1 j5 J+ G1 V+ V2 @$ h4 a6 S  l$ g
Program.argSize = 100;  /* minimum size */
% _# l( G) P% ~Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大* w5 O+ W% \; O4 b6 t
1 z2 e: J! |0 |5 h( I6 d) _: V
/* create a default heap */
/ G' D& t' g7 D- @4 lvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');" S3 l) o3 i  ^9 I  d8 M! L7 Z+ l
var heapMemParams = new HeapMem.Params();2 }5 c8 x1 o, V7 M
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
% N, }5 @! _, `( N3 W$ g- h$ u  k5 ^  O3 e  D. Q
var Memory = xdc.useModule('xdc.runtime.Memory');. m9 Q' z1 a. O0 Y" O2 ^6 g
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);- v" G! H! s6 P# D, M/ n; T$ {: i- W
8 B4 z: G7 R% @2 ~; o. Z: L- }' P
/* configure System module */
% D; C' A0 O: ^. O8 ~) s1 r, Ivar SysMin = xdc.useModule('xdc.runtime.SysMin');
+ o9 i. X0 M$ I3 {9 b% I5 f: R4 NSysMin.bufSize = 0x1000;
1 X& S! T; ?! }. s( {SysMin.flushAtExit = false;5 m; z1 ?7 l: o+ g; L' j9 }  I
5 ^0 Z6 f5 m( e% e5 X5 w2 C  U
var System = xdc.useModule('xdc.runtime.System');
- Y& j, j+ Y: p% P: O" F6 oSystem.SupportProxy = SysMin;* q2 w& Y  U. x& s4 W7 M
- I( i4 m- x4 U+ d
/* configure SysBios to use the lower half of Timer 1 */6 ?5 c* Z6 j$ W. J5 I
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');; ?/ u$ [* n7 R1 P- C
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
# R0 g/ |4 v8 {5 T  z0 rTimer.timerSettings[1].master = true;$ H  }/ K% ]+ H/ c
Timer.defaultHalf = Timer.Half_LOWER;! S3 i+ ^" x1 g6 D$ R5 K
Clock.timerId = 1;: Q$ [2 X! K7 Q

) v" o# I# e; T' K0 g2 R
% R' ]5 W& N. ^/*
  B2 {. A5 b9 ~; |. i  x0 a *  ======== Miscellaneous Configuration ========+ `& A# g- x2 N) M/ z
*/
8 s$ V: f7 U% B$ I
- {# x" G' N6 T/* set default diags mask */
+ K1 s( {9 k$ B; d, Hvar Diags = xdc.useModule('xdc.runtime.Diags');
- B: {7 e4 R2 G$ Cvar Defaults = xdc.useModule('xdc.runtime.Defaults');9 ?# u' p) u/ ^& L. z7 D% w' g- O

: u9 c8 L2 p- l2 f- YDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
$ O/ ]  v" }# q. j! \Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
* }- B0 f! W8 T5 H1 J" z7 G" [: uDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
0 y! r* l7 x) W) RDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */. M$ o7 o8 g( U& d/ _# t5 h0 K
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
; x" m) D: _, M2 ]Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
  N$ V4 r" r5 h. |Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;+ N0 q& _3 w2 b8 g3 A1 B$ L' I+ n
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;6 E8 Q( l/ ^  p& j& a( `0 t
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;: A% n7 A7 Q9 X% U
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
: X1 b* C: ]; P$ l3 ?: pDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
7 a/ f) X' w; _, q, I9 s+ NDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;( m$ H. l* h5 U* E, \% j( J
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;( B! K. I; ^0 x  r# k8 p
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;  }+ V5 v8 O" ^& @* T

" y! i* Q9 n! W( x/* override diags mask for selected modules */
8 ^. j* b" o5 s  x$ e# \, Lxdc.useModule('xdc.runtime.Main');
: _0 l/ `* K2 P9 {. u- zDiags.setMaskMeta(* q- X! k" f3 z( d% G2 V3 K
    "xdc.runtime.Main",
% \8 f& S4 Y$ T+ A$ B" ^! }6 g" U    Diags.ENTRY | Diags.EXIT | Diags.INFO,
$ x7 @& \4 [- J' U6 j, L    Diags.RUNTIME_ON
- ?; @+ Z) {3 O);  u. w8 x7 h" ?8 o
: U; }! o  U/ J& u! O
var Registry = xdc.useModule('xdc.runtime.Registry');( W# U" y9 H/ T9 {& s9 h& h2 b
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;: C5 g$ A5 x3 N
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
1 ?' T4 ]. s% g. `  DRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
& O2 `( X+ n0 S0 ~! xRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
( k3 N5 ~/ U* t1 c( ]3 ~% |% ]" W4 `8 I
/* create a logger instance */% Z$ C# q4 o" [
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');& V5 y' l1 b: |0 |) l
var loggerBufP = new LoggerBuf.Params();
& g, I! v8 z+ G4 ?; f  F- CloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */0 {3 `- |- E: @
loggerBufP.bufType = LoggerBuf.BufType_FIXED;1 L/ |8 p8 M+ h) G# ~6 O$ J
8 H" k: F& w& ^+ v2 e# h6 i5 i
var appLogger = LoggerBuf.create(loggerBufP);
% W3 Y6 w+ d( h6 I; a' a! {appLogger.instance.name = "AppLog_Core1";+ }4 O5 _2 Z" K' J
Defaults.common$.logger = appLogger;
, I( _) [2 c: z3 @7 lMemory.defaultHeapSize = 0x8192;   
  @3 \+ A0 L  n0 Z. f* M! LIdle.idleFxns[0] = "&LEDStatus";
& ]4 f2 J, S! M9 BCache.initSize.l2Size = Cache.L2Size_32K;" _6 `% Y. u: P3 o
; M. S$ X# i& q, L* j
回复 支持 反对

使用道具 举报

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 */  K  e% m9 Y' V1 H  Q
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
) f* y, r- X  {% M/ h" wvar heapMemParams = new HeapMem.Params();+ A; G3 @+ q5 B- E7 ]! M( t
heapMemParams.size = 0x4000;' P+ v, T; _, O  W; t
. O' a% ]: ~- ~; C9 G/ s+ n! ]' ^
var Memory = xdc.useModule('xdc.runtime.Memory');4 b7 n. V, W/ l1 d5 N/ ?
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
( C+ t- x/ O# ]
0 e# @0 j% q: {我大约calloc  每次共计大小为5K*16bits,
5 h" h$ P6 K: J  K3 W' e; L% Q& w而默认配置才0x4000、需要改大。
! J) z; o0 W3 v) ^# S3 |
5 q" |  v; V% Y0 D5 @
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */6 P+ E' f1 T% }" Q
Program.heap = 0;/ u, f+ X8 M) \2 |- O6 [/ G
Program.argSize = 100;  /* minimum size */8 J: r) J6 q- s
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-11 03:26 , Processed in 0.043886 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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