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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构7 Z0 ]& a' _3 ~% V, G. E  Z  V1 l
/ F7 `3 @! T. e3 D( {- y
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2565 I6 @9 b  u  M8 s9 G4 X

, x' i  z! k7 {* ^6 h6 W$ l& M( a其他程序段。。。。。. e/ h8 |( S# E

0 E- d: U8 Y9 G/ m# l/ T- e   free(x_d);
6 j9 n0 }) L+ [# D$ L- x( l
6 U0 B) V* l( s" ~4 @使用DSP侧单独调试功能,验证动态申请没有问题,
6 N; b% X6 T, \1 |8 r6 V, Z; U) z5 J
/ X( ~* |9 Y( d2 {6 X, h+ m但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。  G% m' m/ c; {/ g3 b9 ^9 I

: ~9 ]  X2 ~1 ^  L. j# O1 v& J- ^, g5 [  i

3 ?0 x  ^2 `$ k1 O. M# ~5 A' F6 V- V; B) L1 }! O# O7 l
; l& e1 S! T! x4 h7 }; g
5 h. b8 q6 y$ V/ Z% u( W. Y- Z
8 v# `7 k3 |5 }9 D2 [
. m+ o3 l: i) V& h

/ [8 @0 l$ ~: A' \& |! }
$ ]4 ~- b6 u8 A3 `
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明: x" U2 ~" m; Y: @
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
1 \3 g3 O: _9 G; v) J(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
- K. p" E9 o4 }; m
) e9 _, y* N) L, D! Y* B& l( D
是不是需要在DSP.CFG中进行配置
$ c# [$ I( x+ U1 U% X& l& d我现在的配置为
8 _" K0 U* q8 g# [+ B
1 Z8 W5 u8 u8 j% _8 d/*" B5 g( E; s2 Z
*  ======== Operating System Configuration ========
, W2 s, I+ D% [: e3 Y */( ~0 `" x" R9 P, M

$ `; @8 i- E$ ^: _/* no rts heap */
+ H" v# t- n0 _; A, o  M1 t4 @Program.heap = 0;/ }" Q9 a) C% x+ M9 ?- \* g
Program.argSize = 100;  /* minimum size */
" V0 {( P2 `3 tProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大" r' g- i3 {. `$ L
  A# D8 f; _+ I, ?2 L& b
/* create a default heap */$ ?+ `: E& z3 P5 f  O! J7 g6 _
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');7 n2 Q' Q+ n4 w2 h
var heapMemParams = new HeapMem.Params();
; {' ?4 r* w* Y( uheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
  g# T" D' Y, a- P, O2 u, o- v
# ^. t8 c" H* H
var Memory = xdc.useModule('xdc.runtime.Memory');
3 j5 G- N6 W1 q$ J; g7 xMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
! U5 z' @( I% s3 R* l- k9 G. B0 a, f" H2 m' ?: d1 |+ x" V+ Y
/* configure System module */
! @! b8 y! N+ X8 l) r- A8 vvar SysMin = xdc.useModule('xdc.runtime.SysMin');
7 R& D$ G; Y6 f  r0 qSysMin.bufSize = 0x1000;
4 J, ]" f5 a0 u1 XSysMin.flushAtExit = false;
0 a7 \# U3 ~0 J1 s5 X% R, ?
* x( Q- g4 b4 W) t& l+ e9 a% q* gvar System = xdc.useModule('xdc.runtime.System');
( {0 \3 I. F5 P9 }4 |System.SupportProxy = SysMin;
' Q2 c: v& k4 O+ W4 b, h, D% t! {" ^) `7 E0 u/ v
/* configure SysBios to use the lower half of Timer 1 */
, _' n- D5 f) A/ n! w. G  _var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
3 v& o6 e! j& b/ r! h; Y4 N0 Pvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
2 e" T/ N/ Z, S5 c7 v  VTimer.timerSettings[1].master = true;9 x6 B: R: P- }, [# ?! V/ Q4 R
Timer.defaultHalf = Timer.Half_LOWER;# l1 ?5 g& m# c& g
Clock.timerId = 1;
0 p4 ^3 j  U; P' K! N7 r5 f$ m. m0 F8 M% j$ Y% U
! ^; d1 F0 S! O7 H3 V
/*: O+ X& A) `" w
*  ======== Miscellaneous Configuration ========
9 X1 n8 w" }4 F  f! }- Y */
+ o) X% Z% o" \( l! e0 V. ~( P7 [% V- \7 J
/* set default diags mask */
+ ]0 _1 E( R0 H# Uvar Diags = xdc.useModule('xdc.runtime.Diags');
, E# b# P+ _( c! p5 bvar Defaults = xdc.useModule('xdc.runtime.Defaults');8 X8 A! o" _7 }, P5 E& B. e

8 Z0 V  S, ~7 A% Z/ ^# r. wDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
, @0 D% m( O  B4 d3 A: LDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;6 _' @+ `3 E% E# X; y& z( E
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
7 \( ?; @- P" v$ X; Y4 u' n1 hDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
2 B6 _% b$ I* {! N1 w( PDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */4 c& g3 G9 ^: v) L5 j
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;% C5 u2 H# s3 ~0 h9 S6 P' z1 Y
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;, L6 t* f7 \. B) Y- g6 Q+ `8 r
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;3 p5 W( D. `/ X
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;. [. a- r+ Z6 s, ?
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
3 K/ s; L, d) Z( U$ q! rDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
- ~  t; J! c1 k. j9 @. f  EDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
& a* j5 h0 u- F2 M6 A: MDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
( J3 _5 J% T- @& {Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;2 I9 m- h$ G; M% h. ^/ |& m$ K4 w

3 ]- w# C- f- }  x" |" M/* override diags mask for selected modules */, t; G8 e% ?* }4 e* E1 [5 Z6 k* S
xdc.useModule('xdc.runtime.Main');
3 K; a# b+ h/ \- l: d) MDiags.setMaskMeta(
) a+ g' P3 ?/ F; v% r0 }    "xdc.runtime.Main",
1 z+ H1 i+ n1 T. j1 g* Z3 H    Diags.ENTRY | Diags.EXIT | Diags.INFO,! R0 S% V  `7 g7 @8 E
    Diags.RUNTIME_ON
& l. C' d6 G- f);1 y" N( g9 T2 n+ A
6 z  w9 z1 G+ b0 [4 g- V2 m
var Registry = xdc.useModule('xdc.runtime.Registry');- G' ^9 c6 r  V. k* V% ]
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;+ U+ |( Z" F+ n5 d# Y- n
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
" }/ M+ r" Q( a( SRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
9 H  l6 Z0 g. \- A# fRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
' F6 v+ W* p) e3 f, A0 g- S& Y
8 |! E+ r& Y8 d- a0 Y4 y: _# i, m! n/* create a logger instance */3 {. O. R7 |0 t
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
  E9 Z" d$ k2 U8 G5 V% c& Ivar loggerBufP = new LoggerBuf.Params();
7 N% F* l: m) E$ t' W/ H# k1 KloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */  L) I' z0 _& g6 r0 |
loggerBufP.bufType = LoggerBuf.BufType_FIXED;# d7 O  {$ A; {0 ^  k
& f1 t" V) I# g" U* f
var appLogger = LoggerBuf.create(loggerBufP);  M2 @, V& B* O* ]4 L7 z
appLogger.instance.name = "AppLog_Core1";( D9 t# z+ J5 e
Defaults.common$.logger = appLogger;
& J7 W* s. q) f6 k. {) fMemory.defaultHeapSize = 0x8192;    " \, I; ]: C3 u! q* z% J9 ~  Z
Idle.idleFxns[0] = "&LEDStatus";
# b' ?! Z6 w3 Q% }Cache.initSize.l2Size = Cache.L2Size_32K;( _7 G5 c. j; h, Z1 h; O

% Z+ s4 R8 s" T, B$ L- L) c9 B( c
回复 支持 反对

使用道具 举报

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 */, ]- S2 h  ~: L1 m2 _0 r5 H0 U
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');  Z: \6 j2 x, B& p
var heapMemParams = new HeapMem.Params();
' y) `8 m- }2 ]8 Z- @heapMemParams.size = 0x4000;
, b" X& d0 f0 f/ O! j  v5 [
' r. K3 s& ~0 Z! c4 Q" y5 l# gvar Memory = xdc.useModule('xdc.runtime.Memory');+ o) m# _/ R* S5 |8 h
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
! |- S4 }4 y- x
5 x4 @# |) N% Z) A, g+ j  _3 }我大约calloc  每次共计大小为5K*16bits,4 h5 f9 N/ Q2 c5 ~# e
而默认配置才0x4000、需要改大。
: P4 M; a9 l5 d3 A/ L9 w
; Q. M4 u- }: z, \) u3 D4 o* K
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */2 w0 P% d  H9 ]5 ~1 a& h4 M3 m
Program.heap = 0;! {0 R+ f1 m/ j" _% i
Program.argSize = 100;  /* minimum size */5 ]" Y4 K: a' v1 e5 O6 A! P/ O
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-25 18:41 , Processed in 0.053291 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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