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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构, F2 d4 y2 n5 k" A! B

9 Y$ {+ n6 d: j8 _    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2563 {9 M: T+ A6 d6 M$ X6 Q

% k: t& B0 I! c* K其他程序段。。。。。# S5 z$ H7 O! e& H+ n
: v3 D" y- ]  K$ f+ i1 [
   free(x_d);! Q9 L5 O" V8 ~* t# E( B! H' }
/ U( \$ ^7 B. c) b; }6 B
使用DSP侧单独调试功能,验证动态申请没有问题,
' e, X, K% p; _/ R; V+ o0 X  c' B; o0 Q) v: P# e8 K
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
4 \; j% b; P) _$ T  F$ j

; N2 M8 r. j( X' G
5 s2 [2 W6 ^* B- R) r( J1 y7 P, I
9 w% Z, T. Q6 q3 q! Z, e' u# y! F# K+ _. M6 X( E) @3 g; E9 x; U

2 {/ D' C8 _1 q$ J! x# C7 B+ Z0 j
- _8 _$ Z) \9 y  {' X2 a

) R4 p8 y6 C. Q7 f/ s% D; ~+ v" Z; S6 T+ R8 M9 n
4 h8 n" d9 |/ y- R% H: q
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明9 b0 y" v- q- ?  v: W
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下* Y8 h4 G$ e; T4 u& \" F/ p9 h
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)' t4 ~5 s( t! l3 v5 M

1 K! @2 o1 A8 I1 T6 f8 b( v& }2 e是不是需要在DSP.CFG中进行配置0 r" d- j  e5 `! C% z0 W
我现在的配置为# n, X. I( n5 K1 g- n
& Z/ I. U5 E9 O+ i* B: g( Q
/*# ^7 h* J6 G. D( O! D' {4 X2 ^
*  ======== Operating System Configuration ========; F. e; Y0 Z4 R: W5 e5 A' j) D
*/
$ s5 d; j, r- t) m6 n% c" d: ^3 w" d2 n. k- `# T
/* no rts heap */, _- C% u% Z; {& Z! u1 o
Program.heap = 0;* u6 E6 O2 X* S8 W9 T! h" c7 h
Program.argSize = 100;  /* minimum size */
- C; h1 L/ i& z9 ?% k7 m/ [. CProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大& M/ J; V; t5 P& S9 J. g
7 A5 o* C3 y9 ?4 U. o4 l
/* create a default heap */; [% @. f- C/ d3 a0 T' p
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');; [2 b$ Q5 A& d  I$ O
var heapMemParams = new HeapMem.Params();/ h, {: ^9 n# [6 e9 J1 b: D$ p
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
( Q4 {1 G! D) g5 V4 h$ J$ u! j8 o# y  m" @
var Memory = xdc.useModule('xdc.runtime.Memory');
* k: @( S5 b7 G* Q6 e4 n6 RMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
6 R9 w( X: g( ], e6 y' i8 {/ V7 @# r& U: L
/* configure System module */
! z3 W% r0 x2 K. L; b. U, t, Dvar SysMin = xdc.useModule('xdc.runtime.SysMin');
- Y$ h4 v8 @8 _; NSysMin.bufSize = 0x1000;* B8 K, Q- g# ^1 n# I6 e' `) W
SysMin.flushAtExit = false;4 ^/ R1 X: Q) A0 V8 [+ P# I7 ?9 q7 T9 Y  ?

1 U+ N+ V0 S! z4 E8 H% `var System = xdc.useModule('xdc.runtime.System');
1 @! S5 a! Q9 b0 l8 E% nSystem.SupportProxy = SysMin;. g! y* x( G5 U; Q& w- A4 Y: \. ], C

  J+ L3 ~2 W2 L' u. o/* configure SysBios to use the lower half of Timer 1 */, l) q+ i8 g" Q, W+ n' d6 Q& i- h
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
. A0 f7 f6 v' ?7 y! bvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
7 I8 v" ]6 y. f4 E8 o, p1 CTimer.timerSettings[1].master = true;4 i  G; p0 }" `  b* t
Timer.defaultHalf = Timer.Half_LOWER;6 q" [0 `: @5 z  X. g! g0 {( s
Clock.timerId = 1;
" A; Z  \% v. z: m( c
$ w2 t; b4 S9 ?' o8 F7 z# k, S0 p% n3 z* H6 X1 a7 ?
/*
( l6 n9 w: u( j *  ======== Miscellaneous Configuration ========# a' M: \0 K' r8 R( @: n
*/
5 u4 V  g: v& }) M8 J+ F4 M4 m7 e% L1 R; W4 T9 u* p
/* set default diags mask */& a0 M6 C4 d6 m, w4 |
var Diags = xdc.useModule('xdc.runtime.Diags');
' G% q9 O3 \  N( L9 C8 _var Defaults = xdc.useModule('xdc.runtime.Defaults');( }2 N2 n6 W0 [, H
' j- R. ~2 @" s9 y$ r: |3 [! F
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;/ k$ ?7 O7 x' p1 v( Z
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
( n" j( L9 y. D" R: t& \8 ODefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;$ h5 w% J0 W$ `* X; e' `: l
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
9 `! U+ T. p, j# _7 z$ XDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */5 L4 N: p4 v0 A6 J* q# _) t& l
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;$ d- \6 B* e' O. {) E  `8 E+ q8 N
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;' L+ c, J/ I5 v$ L6 l* D
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
9 f4 F' d$ g2 iDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;+ L+ b. Z  u# d0 ^
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;, F' t* D* V6 }' ?1 s* x" \
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;7 w0 A9 }% ?8 Z/ i  E" F
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;& ?( `) s! _& H0 w* a
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
; J0 `3 G; i6 f4 Y* HDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;, V3 k7 T$ T2 Z9 X1 o  b* s

- D, `( L4 U8 }* r/* override diags mask for selected modules */# \8 j( ^( k/ F
xdc.useModule('xdc.runtime.Main');
3 w# x/ ]" T0 j) n- D/ xDiags.setMaskMeta(
7 x' Y2 ~. s9 e/ [: g5 X    "xdc.runtime.Main",
5 @% U, \# t8 s& n7 ^    Diags.ENTRY | Diags.EXIT | Diags.INFO,+ ]* o7 I6 N" Q- W5 D6 S. R, R' d: L1 ?
    Diags.RUNTIME_ON
8 C& I5 A  A4 K, F4 y- h. n8 w+ x);
9 [; o3 I0 @! U
2 ]  x* \; u0 _; r! x" @var Registry = xdc.useModule('xdc.runtime.Registry');
  T8 J4 x  {" ^Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
# J4 g- R3 X/ r. M/ `Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
  M6 u% @) v  ], A4 f" D- ^+ m$ WRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
5 s/ k" y; E6 c! Z, t* y' X* dRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;8 s' F( I+ X( i+ o
- x9 `( d- p$ k' p
/* create a logger instance */4 t; y  @( j2 N) Y" O8 c1 x1 z
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');# h" b5 E4 L& G! p0 O4 T
var loggerBufP = new LoggerBuf.Params();
7 y( m$ V' U9 ~3 s6 t" xloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */+ B9 g. K/ q+ F8 h: ~& T" |( l
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
( c( W( \% `5 c# X7 u/ z" T' {) t, ?! v! ]
var appLogger = LoggerBuf.create(loggerBufP);
6 |9 L* g1 J# s& JappLogger.instance.name = "AppLog_Core1";
  M3 _) B; b9 F) eDefaults.common$.logger = appLogger;$ p3 E6 \, Z4 V0 I# t- |
Memory.defaultHeapSize = 0x8192;   
( D3 q' L) H' V, z+ |/ MIdle.idleFxns[0] = "&LEDStatus";/ p2 b2 {; S1 l- L
Cache.initSize.l2Size = Cache.L2Size_32K;
$ V  m1 w" r5 `* H) f9 q( e% R% K$ L; z$ a$ [
回复 支持 反对

使用道具 举报

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 */2 k% B" x, I( G# E9 v# c3 ^
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');- S7 P' g9 v% H
var heapMemParams = new HeapMem.Params();0 v8 \0 G4 F. E' I# P/ L) w
heapMemParams.size = 0x4000;) o8 E, w7 G, L0 o( l

2 h' `6 k" a  O4 Kvar Memory = xdc.useModule('xdc.runtime.Memory');8 N' g  y' e# h/ U
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);0 R/ O5 h6 `+ H  Z* r
: [) Q( j5 i8 S7 Q  V' v
我大约calloc  每次共计大小为5K*16bits,; F3 [+ M: k7 r: z
而默认配置才0x4000、需要改大。
) R. m( G. }% h$ A  D1 ], U5 s( B1 K( R: E2 a% c! i. j
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */7 C7 V5 B9 a/ e5 P+ B  O* G
Program.heap = 0;3 _- D' r- s* j& p/ g' W, ^
Program.argSize = 100;  /* minimum size */3 v8 _& ]/ F8 T% r0 s: H$ a! T0 M
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-18 00:43 , Processed in 0.045074 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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