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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
: m: I, J9 _. V& G1 F8 Z3 a# w/ M" W+ U4 R$ k" \. G
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2567 A, O9 V2 m1 w1 u1 ?
9 W7 ~" ^6 E# o: h+ m5 `# r  J$ _# |
其他程序段。。。。。9 K! {9 v$ a+ J5 q
. v8 u9 o/ \) k1 W' f. s/ o3 j
   free(x_d);) N/ ]2 f! E4 r0 B0 p6 Z# I

3 _. o, Z0 {1 u" y, B使用DSP侧单独调试功能,验证动态申请没有问题,
' i/ ~2 l7 o/ W: \. N6 K. t7 {7 b
" _& Z8 P& p( b+ f: P但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。* T; y" D: y! O" c
6 k% B8 Y# j9 `& G6 e' X
" u- T# O, g* T' a" E" @. g

2 `  K% ~& E+ r9 O" G8 I1 ]3 |/ g) j2 r2 A

! \1 l6 T" V+ S' L+ x  m, b' L2 i! _. t) r. L
2 Q" Z2 a" z/ s9 r6 U

7 H, U! m9 Z& d) ~3 s4 a4 s* |/ C. i7 Z# u% P' e9 o

) n4 f4 @4 ?  k$ x/ ^) Y. @
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明* m. f  \( d6 D9 v/ B" e7 t  A
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下& x6 V+ ]! E* V, S
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
' i0 N9 Y, P0 Z

0 @' U  E- }+ r: M( P& L/ `2 G8 y是不是需要在DSP.CFG中进行配置
; V2 M4 b/ ?( w9 X" z( c. z我现在的配置为) z% I5 n; f- O( m% I
' e& G  b. C- \$ ]# B
/*1 R9 X' y3 S0 N7 K6 C5 t
*  ======== Operating System Configuration ========
. B# y3 T  u, s+ {: A */
+ [' ?, x, m) S. S0 e- h1 t! R# b# n4 X9 I$ g/ W) {
/* no rts heap */9 D' ^8 G# W0 {9 {# [
Program.heap = 0;
3 R. h6 s0 a) s0 _Program.argSize = 100;  /* minimum size */
5 h2 [; Z# W8 E" i9 F6 t5 S+ MProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
2 u. O; z( b! H! p3 Y, U& v0 K/ u) a4 }1 j  Z
/* create a default heap */& ]  u# }4 o* O( m5 p
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
% O- |+ m% i- W9 `# l9 mvar heapMemParams = new HeapMem.Params();
$ Q5 K7 o1 m6 N$ L+ d4 FheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大; A1 w, b% j5 x. O" m

0 F! h1 ^+ h& k1 k- i; v/ l
var Memory = xdc.useModule('xdc.runtime.Memory');
- ^' B  F- r' h4 J/ D- Q: dMemory.defaultHeapInstance = HeapMem.create(heapMemParams);( |) |& R! y! R' ?* U$ p

$ W4 r: z8 G. Z/ o/* configure System module */9 i9 i8 D; n3 O3 Z
var SysMin = xdc.useModule('xdc.runtime.SysMin');* Q. _$ u, l$ C! \% }5 Q* z
SysMin.bufSize = 0x1000;
4 w4 v7 l  C- {( TSysMin.flushAtExit = false;' o5 l* T- X( \+ ?, l  Q

$ b8 S) Z6 A- @4 c: K3 o$ c: q+ evar System = xdc.useModule('xdc.runtime.System');
. Z8 q& N# o, jSystem.SupportProxy = SysMin;
  ]3 x4 Q# A2 L
. i5 O# b! W+ ?+ C( `) a) X9 R/* configure SysBios to use the lower half of Timer 1 */
5 S4 i# a8 d: nvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
; `: i+ a) S) U8 _, yvar Clock = xdc.useModule('ti.sysbios.knl.Clock');$ F- h0 ~/ o- p' m3 M: I( o
Timer.timerSettings[1].master = true;3 t, s% K: `! H: Y
Timer.defaultHalf = Timer.Half_LOWER;
3 \& F0 a" [3 L  }9 X  ?Clock.timerId = 1;
  P6 f2 P2 {& v. p, h/ P6 k6 P. e3 @$ z7 [" m9 ~* t
& Q2 u& F) @% N7 s  k7 l
/*
4 E& I; L, v( g7 E" \, k *  ======== Miscellaneous Configuration ========
1 s( [4 v" a# i+ Y */; K/ M. [& d* C' H+ G8 C

( y6 D& g: o2 z5 E$ j. d/* set default diags mask */
2 ^; q" ~6 H% Dvar Diags = xdc.useModule('xdc.runtime.Diags');
; {. h' ~4 u2 x9 G3 F5 a' O6 Svar Defaults = xdc.useModule('xdc.runtime.Defaults');
- [5 D# T" _4 O/ O6 N
' b8 t# E( ~0 A& HDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
7 S8 r: F/ d* t& `Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;3 \+ M$ r3 u( B9 S2 p
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
# O/ n# S# i% T! u/ \# K6 E3 hDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
, K/ @/ _& V# n6 d: u8 q6 ]Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
9 U0 Q1 O8 r( {/ P% q0 tDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
. }. j* I  }/ p9 {* UDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
" \  {1 b/ s" l5 gDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
1 M6 \& c+ I& W- v! tDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;+ m* J4 ]2 X$ l9 k# h. V
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
% w1 L7 `- q; z- n7 E% V4 xDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;# Z- ^" d. ^3 m8 w, p# G/ M
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;2 }/ k7 ^( F, w* d0 ]0 t% K  ~
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
7 Q& A8 B* X9 S! W3 F$ a, ~( YDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
, \) b* n1 \1 |' ^3 e, s
& }) ], G, B9 @, I2 j( v$ R# y  E/* override diags mask for selected modules */
! V; Y! |( d. x2 }) Mxdc.useModule('xdc.runtime.Main');9 k& n. O( Y  U. {8 d0 }# E
Diags.setMaskMeta(
  H# k& F& z6 E8 {1 c  |9 U    "xdc.runtime.Main",9 G6 v1 ~" k- a/ o+ {
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
( b8 b- y' y" a  R' N% c& x: T7 `    Diags.RUNTIME_ON) c: H! o6 I& J9 ?- F4 S
);
" @8 x  `: l  h, Q  f  e
2 D7 N  c# v7 d- q, a& xvar Registry = xdc.useModule('xdc.runtime.Registry');
# @# D# v$ Z2 X- x' K# q* }Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
; Y( H6 B! j- a9 v4 xRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;9 W) @; ^8 G2 B5 h
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;# O. [  _* ?0 w0 {% A3 t% B. d
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
$ `9 X1 {" v0 L0 C3 c! U8 O0 l9 j8 D6 H. n0 \
/* create a logger instance */9 Y( _& t: Z8 j$ ]
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');3 N$ F$ S( }% S' {
var loggerBufP = new LoggerBuf.Params();
) d4 f$ ~  c- {8 CloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */% ~8 n7 \  F% Q# d- p8 B. k
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
+ W* Q5 @. ~; f% w: Z$ P) y* y
3 [& x8 Q0 Q+ v- ?6 }+ _# Cvar appLogger = LoggerBuf.create(loggerBufP);
/ c% F# h. |% ^8 C4 MappLogger.instance.name = "AppLog_Core1";: V7 a1 U; l6 W& D, ]7 y% H! h
Defaults.common$.logger = appLogger;
1 l9 I. A: E' R# G; F, MMemory.defaultHeapSize = 0x8192;   
$ x. `& F: Z  \/ c. pIdle.idleFxns[0] = "&LEDStatus";/ Z5 B2 c& C0 y" R. f
Cache.initSize.l2Size = Cache.L2Size_32K;, o$ c; W9 d3 ~, l3 `- ^- y

% k' Z* G& w+ t( I5 v. D9 \' }0 Y
回复 支持 反对

使用道具 举报

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 */
/ f5 F& g/ A3 F$ p9 hvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');/ G+ [; H6 B6 P- d
var heapMemParams = new HeapMem.Params();
8 C2 j# I& ?, E  NheapMemParams.size = 0x4000;2 _4 o. b, d) i+ Q. T+ h

: ~- Q8 P; C, k$ z  vvar Memory = xdc.useModule('xdc.runtime.Memory');
) Y/ {( _' E: |+ s. r$ _$ k- l0 r9 BMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
8 Y! ^( U! r# D! ]4 j. R( E5 N) |/ G3 v4 z$ y  r* \3 g$ M
我大约calloc  每次共计大小为5K*16bits,% t% D0 v  q  P2 _& c* e# k! N) `  f
而默认配置才0x4000、需要改大。: ?& j% u/ v5 i2 _* w) e2 l2 i

" t' k) t' _+ Q+ Q- L
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */) ~0 d7 i( P- F, m, i6 w
Program.heap = 0;
. n6 u, T3 R8 i( ^$ tProgram.argSize = 100;  /* minimum size */
) b/ f- ]% x! U! jProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

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

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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