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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

9 W0 _: O: ]+ G9 N; ^- D5 d    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
; V# Q6 L- }0 r$ l: v# S1 L+ R3 `3 ~! q& O/ k) f
其他程序段。。。。。
8 N6 S5 F5 x- {* H& ?" a : c) U/ R; ]; `; X3 b, U
   free(x_d);5 U% Z3 \! u: l: r% Q; H1 |
4 S% O9 T  f+ Y
使用DSP侧单独调试功能,验证动态申请没有问题,
2 p* J+ O* k/ T* p9 Z6 y* b7 `% U. P! L. D7 I- U9 Z4 H1 m
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
. k; i: ^8 i- o5 ?4 [* W& N9 e

. u3 L3 N$ w9 C' i4 M: R( f: n: e0 S% w
9 u/ Q1 v) `& y0 |- ?$ k4 @$ R) O3 a4 g* r: T; N

4 U# N4 {$ Q3 P/ S2 A2 K- O3 I+ q# E! |4 f- B$ E, _- n: P# f! E

6 c- ^( J7 N% \: f
. _+ }+ Q$ A3 a' N3 J1 ~3 d+ T
. Q; ^5 ?0 B, j/ A1 w, v( E
$ l/ {& r4 J" q2 x$ S9 f8 D+ D0 q0 W6 n1 a$ {( s7 ~! H) X
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
' V/ Q7 d# [6 C" B我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
* i4 V. q" O# L3 A9 G4 [(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
# I: l' G2 [* S( G

* c- {2 o. I' Z4 k是不是需要在DSP.CFG中进行配置
9 t- g. x8 g! o$ |我现在的配置为
5 b0 E# W+ [; o$ z8 w+ s" j# V0 D7 h2 t) Q5 X
/*6 x+ g% ?* w( K  Z+ a) o
*  ======== Operating System Configuration ========
* i; j0 o- u" l4 Q, I* b6 q */' E* n4 I8 X. e) V, \! e+ c' b. K
/ @. r1 ?6 U- ?5 @+ @1 n
/* no rts heap */
% G' X! U$ P, d* e- ^# R, f% |Program.heap = 0;
& e4 I/ b2 Y( T: g/ wProgram.argSize = 100;  /* minimum size */
. U' Z- s- e' pProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
$ r$ x1 G+ F8 p2 v+ v7 ^1 y/ q, x3 y: u6 e
/* create a default heap *// R& b8 k9 ?! Q; _# O* g+ _! ?7 M
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');7 g# v1 A3 k2 D; T0 C% S
var heapMemParams = new HeapMem.Params();8 x4 V$ S. V2 H, K$ Q
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
4 w+ n7 T3 \  i% G4 s. A# ~% p4 `" l& a) I7 D
var Memory = xdc.useModule('xdc.runtime.Memory');
1 O2 A7 H0 F" d8 [8 QMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
( i: D& L8 X% v: g* f2 ?
: \& [+ j) d" u( z7 [/* configure System module */
& g% r; A+ t+ v: m# B* B3 Z' `% H8 fvar SysMin = xdc.useModule('xdc.runtime.SysMin');* c, \: u" P, E; [
SysMin.bufSize = 0x1000;
6 {& B5 h5 i) |) LSysMin.flushAtExit = false;$ i; |. a5 j8 t" B/ N

% a$ U; q4 T$ Y! k0 L* P5 U( ivar System = xdc.useModule('xdc.runtime.System');
" S! R% G& i& q, y, ~System.SupportProxy = SysMin;
' a7 {) f& m; ^% |+ S) a  r$ E! O1 T6 e* d% H  \  m1 m/ r
/* configure SysBios to use the lower half of Timer 1 */
( M8 @1 J' X; l: `var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');( g3 F6 b' ]( E  P2 ^* L
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
9 H4 a# z& a" J$ _Timer.timerSettings[1].master = true;7 W; X) v$ {8 C7 l1 M2 ?
Timer.defaultHalf = Timer.Half_LOWER;
# _2 X* T' R% v  t) I7 aClock.timerId = 1;& A+ H2 G% r0 z
7 x: ?9 L( R0 i
. d( ?' J6 U2 a2 d6 V
/*3 i4 \% u6 A; z& {8 n
*  ======== Miscellaneous Configuration ========  ?) M. F' B/ h8 k  M" y
*/
- t8 M9 B, Y$ A1 u& U( H% c% ?" p* y3 `; r3 ^) z5 _& T
/* set default diags mask */+ y' R! m1 e  A  u% i* H: {" W) m! o& V
var Diags = xdc.useModule('xdc.runtime.Diags');3 K; m! t( z: K  d
var Defaults = xdc.useModule('xdc.runtime.Defaults');8 q: L' s5 j; f( g; ^# @

- w8 \  i5 k7 n7 m& G+ }0 eDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;/ d1 [' ]: K7 A0 b
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
$ @+ z# A4 G5 {& \2 W1 VDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
; k/ Y8 |1 t9 y& [* m) }Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
, l  w! I  Y9 g0 E6 nDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
9 I' |- }0 o# h) TDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;% V- J0 m' y0 S3 m) l
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
8 W6 ^  Y, M- m( `& J# UDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;1 x& {" T1 D! _
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
, e6 e. p. L& E0 G" hDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;! _/ C8 g& n: V3 P( y9 d
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
& u+ b5 A  J* E7 EDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;" f1 A6 i/ q& U1 j6 W: ~/ \- n
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;3 V8 ]5 o" R$ ~0 o' v
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
+ E2 |/ C" z8 w/ y8 f4 z9 n
' ^- b  F0 ~4 c/* override diags mask for selected modules */
' M7 w- ], G4 {5 c1 Uxdc.useModule('xdc.runtime.Main');
0 k8 a* M) ~5 A' PDiags.setMaskMeta(
3 Z7 ?6 p2 u- B- i    "xdc.runtime.Main",$ h" v% r& ^- r
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
( J  L5 T6 f) T. g, Y: l$ k, ^    Diags.RUNTIME_ON
% a" N2 d* p' a& E- V& u);
# t* Y* {1 i  j2 u/ m
& M. N' |* }$ M/ ]var Registry = xdc.useModule('xdc.runtime.Registry');) M. ]' f2 n- k' ^
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;' O& t: e6 R0 _7 V
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;( e+ b6 O6 z2 I% N3 C
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
! f& E) t  C# C% gRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;9 ^6 l4 m& u  @! ?* t
# a" r9 R' B$ K8 s) r" F( ]2 f
/* create a logger instance */
4 f( m7 d# T. s& zvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
3 q( D" d' P7 ]5 X* v4 X* tvar loggerBufP = new LoggerBuf.Params();; @/ t8 Y! P5 H
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
; Y, C0 [9 F4 `loggerBufP.bufType = LoggerBuf.BufType_FIXED;
' ], O- ~0 w6 j0 l6 W# W* h* ~5 L' b3 _# B8 ]. C8 E" ]" f: [
var appLogger = LoggerBuf.create(loggerBufP);* q% }) y8 U5 C9 t+ ~  u5 k6 h( r
appLogger.instance.name = "AppLog_Core1";
* ^% Q+ ^3 z: ?' D3 GDefaults.common$.logger = appLogger;) r3 B% k( _& H: a5 @. o
Memory.defaultHeapSize = 0x8192;    $ @( U: T/ _! l8 z4 |
Idle.idleFxns[0] = "&LEDStatus";! t3 F6 L" r# i' [
Cache.initSize.l2Size = Cache.L2Size_32K;& G5 g" b- s5 r1 v

& M; o- F0 G9 L
回复 支持 反对

使用道具 举报

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 */% n( h+ ^8 e$ ?: z3 P# E3 c+ b
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');- h" J5 Z9 D$ _
var heapMemParams = new HeapMem.Params();& h" L& r. s, q0 Z; z
heapMemParams.size = 0x4000;: l3 t- k) ]* u8 o. \4 ?

' r3 ]7 h# V( w: v6 Wvar Memory = xdc.useModule('xdc.runtime.Memory');
- N0 R) g4 }+ pMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
8 T, y- \0 k& C+ Q' r* G1 x
6 c+ E& p6 W+ V9 d: F! Y我大约calloc  每次共计大小为5K*16bits,% Y: t! d- ^3 D- a9 q' x0 g
而默认配置才0x4000、需要改大。
- m- C" f" i, }7 C" H/ P0 @  t8 J7 _3 s. M0 W: y8 N
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
1 m' m( B/ M+ a: d. l: A$ |Program.heap = 0;
  c, c4 b; s: k5 eProgram.argSize = 100;  /* minimum size */7 L, h& q! h8 A( ]
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-4-7 06:04 , Processed in 0.042296 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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