关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构9 Q* w2 ?. ^2 v  B% l4 \
* P, N0 l& A. _1 G9 X) R
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
* t+ Q6 f/ {+ X5 |/ w/ u6 v
9 a; r0 T$ d$ c$ ]2 b& e其他程序段。。。。。
1 c3 y0 y  Z% t2 X* i& T. j4 M
) [* T' B$ e8 r% F4 H  }; B   free(x_d);. M- v1 z! H7 x, H! z- Y% D7 f
1 r' j9 K. c% T0 c2 A" X7 i/ T
使用DSP侧单独调试功能,验证动态申请没有问题,- S& H# o% v# J5 `- s! i

9 z7 E- c/ x9 K但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
" U- H3 v$ _: a

" A- T6 V9 |+ r* a
6 N& j1 S$ Y  ]: G9 {  V
$ f- u# ^3 ?4 O1 |$ p2 a
$ P. x: \/ ~7 k1 U
7 n; L+ n. Z( i+ F0 U6 E+ W% P! B( u3 S) N4 i+ L+ V3 t, ^5 E+ i
: k( ]- F3 N9 a5 s

2 ?1 c; s( {( u3 e. P% l: y) P9 k6 S; O, n4 k

1 T9 k6 @( d. ~# t# E
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
3 q$ D& Y, j6 q5 L& S! ]8 T我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
% D& W1 X* c4 ?  a: T+ I# C- \(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
: {- {9 O& A6 u& [7 i- G$ X: s) V6 T
2 U8 V! [3 \2 \+ ?4 B/ |3 I3 m
是不是需要在DSP.CFG中进行配置4 f& h- L- M. N% b8 B9 O
我现在的配置为3 A- v5 N3 }/ s9 t9 l3 M
, p+ A# Q, I" s) _$ i  x  ~
/*
. C0 R: m/ \& o *  ======== Operating System Configuration ========
  @" {$ I4 N, c6 C */
: X8 w0 b& T, B1 I5 ?9 \8 |8 y( O" z3 I0 J* r, I% G
/* no rts heap */
6 G8 v4 q8 C8 Y$ G6 g/ C& |Program.heap = 0;
! P: W6 X+ ?* X: MProgram.argSize = 100;  /* minimum size */
8 j1 @6 {% L+ m7 HProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
: b3 ^% R/ k" Q+ X$ i& A) n9 J; G
$ U: E9 ^8 r. N& H/* create a default heap */
5 K5 ~9 k% Y; H  W9 T( T% l- `: Kvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');7 i8 b( ^, A) x/ w) z  H) |" `  N
var heapMemParams = new HeapMem.Params();) V" H7 Y: v0 ^
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大" V# \* n% _' |3 ?: R  A  f
% H. V: y) D' l
var Memory = xdc.useModule('xdc.runtime.Memory');
( W/ Y! G2 z* S/ oMemory.defaultHeapInstance = HeapMem.create(heapMemParams);5 D) L) n/ ]! b2 r/ O) i" o+ K
. T, R$ Q& _  i% X7 P$ \1 |  j# `! \
/* configure System module */% y* O+ v5 t" d* h: p
var SysMin = xdc.useModule('xdc.runtime.SysMin');
5 Y% ]: X3 ?- VSysMin.bufSize = 0x1000;
+ ^5 k" R$ H1 ?SysMin.flushAtExit = false;$ }% h+ ?( Z/ u8 k( _7 ?8 `
% ~+ X  N/ P$ n$ Z& i% |1 M+ D1 B
var System = xdc.useModule('xdc.runtime.System');
4 i4 R' G, q! B- q, `+ n+ ZSystem.SupportProxy = SysMin;
6 j: r4 l) \& s% z  o
8 S$ i0 ?6 R# K8 v# f" r/* configure SysBios to use the lower half of Timer 1 */" s& `& g  A$ }
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
* d( D5 _" ?1 ^/ b; ]; A' Tvar Clock = xdc.useModule('ti.sysbios.knl.Clock');- I1 Q# q! Y1 X2 x, m. ~- Q% q
Timer.timerSettings[1].master = true;
5 H1 y- i$ I+ WTimer.defaultHalf = Timer.Half_LOWER;7 T" H- ~- e' x8 B8 z
Clock.timerId = 1;
3 a2 @+ Q- a4 |3 a% ~5 T; q( A' w2 i& L9 M' O
. Y5 h6 N" C% Y
/*1 h' h3 G+ b8 X
*  ======== Miscellaneous Configuration ========! U4 {5 L7 Y. P2 g: Z
*/) A) Z5 E$ C2 B
. U; L. `8 ]5 i& p* Y7 v1 @; c
/* set default diags mask */
8 P, E# U! I/ @+ ^/ ~# hvar Diags = xdc.useModule('xdc.runtime.Diags');; u# j& o6 r/ Y" A0 ?* t
var Defaults = xdc.useModule('xdc.runtime.Defaults');
3 n$ A8 V. a; o1 k# {/ `" b) J- `9 c2 P, b2 O
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;* U( ]2 F& b+ g* Q
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;3 X& k# M; U- H
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;. W0 y$ p7 X' F1 z8 y' {
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
# r# S' V7 `+ {$ z# YDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */3 W$ W. r" `! z; a
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
$ T; }* }, D% ADefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
# f+ N# ~. f/ K% hDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;/ _9 m5 p4 C+ l0 [/ i# i
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;" `, J: [( S3 g$ `( p! w2 P- H
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
8 {8 n3 D0 v$ p% b2 B/ W7 p, N, RDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;$ G! h% z% j# ]
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;2 M+ ], d8 w, Q& s9 T3 J
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;& o, n5 ~! Y0 ?( U  U
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;! n1 E8 m% f: _# z
8 _* u+ |! x! M
/* override diags mask for selected modules */
0 K7 t6 j2 R% Mxdc.useModule('xdc.runtime.Main');; M6 C9 ?, Q: k0 l" C+ J
Diags.setMaskMeta(% u; o" I& ~) o1 F! M
    "xdc.runtime.Main",3 _+ \4 P* ?) t7 m3 L
    Diags.ENTRY | Diags.EXIT | Diags.INFO,) o) x; O7 C% ]) b
    Diags.RUNTIME_ON2 T8 I7 @% b4 I
);5 a* q# S5 u4 B1 _- ?6 E

- U1 i3 s/ Z) J8 z. ]: i3 q2 Uvar Registry = xdc.useModule('xdc.runtime.Registry');
( c- b3 y: u' `- o$ t" n$ m+ |Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
% s, V$ A6 q4 M! l/ V& CRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;  B* Z9 E" p4 ]" v3 t
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
! w6 ^4 v0 B  d  _: FRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
5 @  H8 D. c* W+ X3 w
1 J+ a# }6 f! F, w0 L& n( P& V3 W/* create a logger instance */9 X. C5 M' H3 I- ?
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');3 x! x0 k% t1 m1 y4 {9 M
var loggerBufP = new LoggerBuf.Params();
, H3 D: ^3 @9 Z) q$ W9 ], _! v8 ologgerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */- a: g5 Q6 _9 O' M% I
loggerBufP.bufType = LoggerBuf.BufType_FIXED;! A" v  }: H3 ~
9 d4 |, z1 [! n8 e' j" _5 O, x! L
var appLogger = LoggerBuf.create(loggerBufP);8 p! g) ?5 T2 [6 C5 S! o
appLogger.instance.name = "AppLog_Core1";
$ z* _( ?( s7 L/ H9 O! F  c: x8 xDefaults.common$.logger = appLogger;! w1 `3 k8 x% V" r
Memory.defaultHeapSize = 0x8192;    " T* e5 l7 |+ d, _7 S. C
Idle.idleFxns[0] = "&LEDStatus";- J" K1 u+ W% `; \
Cache.initSize.l2Size = Cache.L2Size_32K;
5 d) Y7 a9 w7 p9 H* Q' J" H% ]& E7 O, q# A0 n
回复 支持 反对

使用道具 举报

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 */5 X4 e. l" ^; M) U
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');2 w2 q5 L& L  ~9 o/ X
var heapMemParams = new HeapMem.Params();3 z' }) V8 C! O! W5 i( `1 ?
heapMemParams.size = 0x4000;! G5 j7 ~! D: p! ]

' O7 o" p" y2 A4 g4 ^var Memory = xdc.useModule('xdc.runtime.Memory');* g, x: L3 [/ q, R* o
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);3 f6 J7 U3 y  F( L2 X

3 E! _9 t& c8 W) N! a% N& u' t我大约calloc  每次共计大小为5K*16bits,3 [/ ^' I) f0 `: B
而默认配置才0x4000、需要改大。
# @3 j( r  I1 x0 y0 i* D; u- T( b3 m' I2 i8 ?$ V+ Y1 U1 T
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */! X* F  Z8 v' P* i
Program.heap = 0;" _+ W; [% x! I
Program.argSize = 100;  /* minimum size */. @# D. v+ [( a) O
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-10 14:14 , Processed in 0.040353 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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