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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构7 s2 O& h& S  ~+ ?, C% f: P0 b9 O

2 b9 a# @+ J8 B    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
* z  x  x# B, X, N
9 E4 y- X, R, ^, z4 E' O1 X其他程序段。。。。。# @8 R1 O" ~  L  J
0 M" \7 L) j; q! C$ A0 E# T3 ]) [# X
   free(x_d);
6 ~: v5 i- S; g$ w1 F$ y! ]# U6 g; G$ @  C
使用DSP侧单独调试功能,验证动态申请没有问题,& M# W# r# H4 v2 E4 G$ ]' k/ r
3 N7 F& W+ r8 E* F! m2 ^
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。% N) }5 `: ^1 a4 h! P4 P

0 `8 x, V5 R9 H/ r7 r/ U2 ~( h
( ^3 Z& j4 S. F2 b2 n( V
5 ]9 p1 ]+ y7 j# Q1 C
# t# y) U2 ^3 G5 x6 ?+ z" z0 C( m' i1 A( v$ O

1 F+ E5 Y& @0 S2 S: k9 f0 {; n$ |  t* H# W

0 `9 ~/ e* X. W" `; V5 w# _0 O: x( m) [

$ p1 Y$ [1 X/ j7 w( I7 B' o3 v. E
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明; m5 m1 N4 f* ]
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
  h( E5 @/ Q. `' H(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
! w+ v2 m4 C% r, B/ `! ^$ J6 I

7 ^  x1 S8 {6 U& i是不是需要在DSP.CFG中进行配置
/ h4 T: q/ l) }7 Q6 `8 n( Q; J我现在的配置为; F0 F' Y/ ^' o3 E
3 _0 F; D; G- v  @' N( A# F
/*  A' O8 E& j# k+ R( a! X8 m
*  ======== Operating System Configuration ========
! k/ y( d( T6 s5 r* z */2 r. y8 w) d; c8 V
+ Y6 q4 ~; _/ N" r8 ~+ k6 e
/* no rts heap */) t. w. u; p+ K! u) r* \
Program.heap = 0;
! d$ m4 F, N, h$ D% xProgram.argSize = 100;  /* minimum size */' _. X$ V, g7 u* S! h& k9 M
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大7 K0 o9 Z& @3 e2 U' A
* q1 O* \- M; I' P0 O: |4 e* D( u
/* create a default heap */
! |$ q6 w2 l! e$ r  X  Q: S( uvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');% u+ k& Q5 z! p! r3 g- j! [
var heapMemParams = new HeapMem.Params();
% \8 {4 @+ c9 KheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
/ u3 U. Y5 @+ j/ D
" `8 _1 M: I, w4 i
var Memory = xdc.useModule('xdc.runtime.Memory');, Z# }# y( s6 c" a; E
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
6 k6 N0 f8 n, H/ J9 I. ^( o$ B( _1 X) Z! n' I" R/ k
/* configure System module */# G8 R/ C+ @8 T: w
var SysMin = xdc.useModule('xdc.runtime.SysMin');
) V+ |- \4 }( O$ e8 r2 aSysMin.bufSize = 0x1000;
% r- ^' f9 }+ q; Q( hSysMin.flushAtExit = false;
, g: W1 X: s2 D8 o% ~) L, v% W8 w! T4 Z+ R1 _! k
var System = xdc.useModule('xdc.runtime.System');
2 X" U5 K$ Z! F1 {: a6 OSystem.SupportProxy = SysMin;4 _+ {$ n. ]- V$ T6 Z$ E* J

+ u1 W. Y5 y5 U7 W0 l2 [" L0 ~/* configure SysBios to use the lower half of Timer 1 */
/ _2 j) y3 a5 l# M/ q# mvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');, Q7 `# l( f* U+ l& P2 j$ C- ~3 K
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
6 v; D# C# C8 Y# h" X3 PTimer.timerSettings[1].master = true;# L# _7 ^; j3 |3 r, \  O  C
Timer.defaultHalf = Timer.Half_LOWER;6 ~4 Q+ i! v1 h) d' t' ]! u
Clock.timerId = 1;" D5 B6 ^3 n" a* |2 [; t

$ |; X$ V; ~/ U/ @- H4 r
' ]$ K' }; J7 {: S/ Y1 T$ a/*/ U! ^6 q0 O1 V$ I  w5 z5 S
*  ======== Miscellaneous Configuration ========
/ ]6 D: G' \/ q* k3 N- E */+ a4 S+ n+ q6 I: `% v% d

) J/ n" B0 [1 V5 x( \+ m/* set default diags mask */
$ J3 S5 L$ }+ d% ~1 l: Qvar Diags = xdc.useModule('xdc.runtime.Diags');
" @. ?6 ~/ f3 e; s  ~3 b1 Mvar Defaults = xdc.useModule('xdc.runtime.Defaults');' w9 [& u6 |1 A4 }

! e9 y4 w0 b1 t( n/ ADefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
! ~9 J% x9 \/ r- D6 d; n& QDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
. k/ C, Y! `# K& B! d$ T" mDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
4 d4 Z3 w# M" O/ d0 p  h+ GDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
5 \; y$ o2 r' j5 tDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */, S! j9 y7 }' \
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
* ^) x7 y1 U: t6 R. a$ sDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;$ \3 H! q6 w; J& f; X+ [, ~( `
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
- n' U5 f7 l, L% p3 H7 KDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
7 p  E7 y- I3 E6 D/ U0 a2 MDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
' s+ A9 J( a* Y0 y# S5 yDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;, j9 _, V+ `7 B! I' i
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;! A9 M  C! r, o- k
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
/ A8 w- z$ @& g; g* HDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;( R9 {- w8 t3 b* l
4 F' C' _, f# ^3 ~3 I
/* override diags mask for selected modules */" V! Z& n; c8 h, n; W0 @$ o  J
xdc.useModule('xdc.runtime.Main');
# n$ n6 h- g7 C% [Diags.setMaskMeta(
( y2 x+ R( k, |( d    "xdc.runtime.Main",9 m9 n- E6 ]( w9 ?+ G
    Diags.ENTRY | Diags.EXIT | Diags.INFO,$ p6 E7 c9 m/ i! }, S7 K& f
    Diags.RUNTIME_ON
$ b% z1 I( _* ?! z0 });, K7 Z7 M2 \6 Z
: X. `" f. C2 V" q# J6 g
var Registry = xdc.useModule('xdc.runtime.Registry');
! D7 C8 Z# p+ t& ?0 U% yRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;; C- C8 r% }% c+ |8 {2 @1 `
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
# g* B( ^3 P7 e, i9 Q6 J/ DRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;. D  m0 J( j# {' c# e/ ^3 B
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
8 A$ _3 E) ]& t6 t
- a; a2 L; ~: o2 u* J/ M2 |7 m" E  D0 i/* create a logger instance */$ G! v4 [# a% S: f7 R
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');4 E3 r" s9 l7 M9 ^, r5 @% f$ ^: V
var loggerBufP = new LoggerBuf.Params();
/ t1 m. h4 G; ?7 A8 F0 FloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */: g# W5 C2 l- Q% B& h
loggerBufP.bufType = LoggerBuf.BufType_FIXED;% x' d9 @3 a, t3 {% k7 q6 D0 n/ W& H$ ]
+ _+ D7 P, g" d, i* ~
var appLogger = LoggerBuf.create(loggerBufP);% K- q& j0 F  x, f* @9 X8 i3 i
appLogger.instance.name = "AppLog_Core1";
  \% Q4 d# k% i/ a% fDefaults.common$.logger = appLogger;- i6 ~, l2 E& A/ T8 ?
Memory.defaultHeapSize = 0x8192;    6 f  P9 W) t5 q& d& C
Idle.idleFxns[0] = "&LEDStatus";
- v5 s2 F' M4 M. q- N$ @3 ]2 R. @+ GCache.initSize.l2Size = Cache.L2Size_32K;
( W9 L0 L: z# s( `' c/ x" w. \" \$ S# w5 D  ]* ^
回复 支持 反对

使用道具 举报

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 V# t3 w) z/ Mvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');! }2 {& Q) S6 l2 S9 ]" M
var heapMemParams = new HeapMem.Params();
; Q, k: _% f  p+ Z, hheapMemParams.size = 0x4000;
* a  E3 e1 _, e* s) L6 \* T/ }, C9 o, ^) D+ w; \' g: A/ g( `
var Memory = xdc.useModule('xdc.runtime.Memory');% T, ~* t6 ~" ~  S
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
) c' h1 F6 T1 ]/ x4 e) A+ S9 \. W6 j" T4 C3 G8 F  L
我大约calloc  每次共计大小为5K*16bits,
' J, A6 w8 c; E而默认配置才0x4000、需要改大。( o1 j/ M4 h2 B4 a' ]

- g' |, V; C. C& u4 ?7 T6 @
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
1 K. r: f$ G4 w! S' RProgram.heap = 0;0 Z5 K) B( k1 `6 P( [) y/ ~
Program.argSize = 100;  /* minimum size */$ Q2 g. }, L4 E0 x3 P: i( G
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-8 14:06 , Processed in 0.045525 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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