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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
2 |- C# H0 ?; D+ i3 E/ [
9 I' S. V5 E' N6 I$ m8 Z$ m  L* b    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256/ E! ~" j9 U, x; x3 f
8 o: b4 Q2 y  a2 ~
其他程序段。。。。。% [6 Z/ N7 S  L% `1 ^" t: G, O

* I/ L; C$ ]3 o9 N/ B   free(x_d);
- _( g1 ]3 S- i6 n* i. ?! u- H  _; z  W9 s; U4 j" l
使用DSP侧单独调试功能,验证动态申请没有问题,& T3 @' Z8 B9 v# b
* a% u; \9 r+ v% ?) D
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。4 {0 U& P7 K6 @  S1 n
$ T% H& d4 o3 y% \1 h# @9 }

8 ~# W: G2 e( @4 ~% P* C! {$ y4 G% o- Y- D

* K/ V  @7 {4 V# U+ b
/ d2 L: x% Z! D# `) ]5 s/ e. V7 |1 W7 X4 ?. R! n( O: m* r9 n
% ^( v" B  Y* |7 G4 b9 g5 c

; Z) v- d: q7 z' u8 ?% i: y! P9 C5 o9 T7 D, a: ^8 [( j$ Z  E

* T/ N$ D* c$ Q& x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明; H9 ^: C$ w! K
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
1 c4 ]* Q0 ~$ m9 p(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
7 x+ R1 ]* Q  C5 A: t
( s; {7 y0 w- M
是不是需要在DSP.CFG中进行配置/ G7 @+ O! n$ A6 `
我现在的配置为) j1 R, B; k. z+ p8 n) y

5 F1 w& `6 Z6 t9 U/*: x' H7 J  y& r
*  ======== Operating System Configuration ========
6 c9 L4 @  }/ w* f' i# u */# g2 G8 X! x& d0 q
: F* Q$ l6 g9 F4 z, o' {# F4 p" Q
/* no rts heap */
7 ^9 G7 M0 U: B; ?Program.heap = 0;
- I0 K; n! d7 E( K3 }- r7 F9 PProgram.argSize = 100;  /* minimum size */0 s: e0 G* G' T
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
: K/ \, W$ K, t  p/ y0 Q  o6 {
& k. S! D. H0 `  [6 D0 b5 ]& t/* create a default heap */
& E9 E# r3 _! xvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
/ T) x* ^; f9 P% c2 vvar heapMemParams = new HeapMem.Params();
5 E% |$ |) b, |. ^heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
$ ^3 `1 y$ S: o
' r: E7 V9 D( Z* }* v
var Memory = xdc.useModule('xdc.runtime.Memory');0 ?- J1 E4 m0 A1 Q) F$ U$ A  C/ X
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
+ r7 o* g1 L, ?; H6 r
3 @, {$ E  _" V$ r: i* A/* configure System module */
/ n6 X2 C# W1 [! B! d1 q$ P- Evar SysMin = xdc.useModule('xdc.runtime.SysMin');0 o! O- x% i3 N' t% l
SysMin.bufSize = 0x1000;% H& ~0 q( h/ ~9 z/ k4 g8 a- k
SysMin.flushAtExit = false;
4 n8 M* t- T# B. B8 [9 M: g  k3 {9 s. i! @) t+ O
var System = xdc.useModule('xdc.runtime.System');  w8 W2 p' C; D# m$ N1 C  g' U
System.SupportProxy = SysMin;
% @3 d+ R$ T3 ^
- }: g5 z- r8 u3 a7 F3 e. P" Y/* configure SysBios to use the lower half of Timer 1 */1 I9 R  a" e% a  T
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
, ~/ ]  U# i9 a  G: v3 {: Zvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
* P9 s4 K8 H+ ]$ l0 |4 ]1 `Timer.timerSettings[1].master = true;
& R) m% E, a+ V7 V7 u: g# |Timer.defaultHalf = Timer.Half_LOWER;0 [* o4 H5 |, {/ ^5 v
Clock.timerId = 1;
' `  @/ u- x8 u
: v/ b8 @* A0 v6 x+ d
$ u6 Q) z2 G5 ^: O  z/*  i" U2 @* U: E1 p
*  ======== Miscellaneous Configuration ========. ]4 |! Y, n! f
*/0 o9 l. c, O) {% \
  n; g5 q  o. G% f4 n) Y& q
/* set default diags mask */4 t, G2 a1 A3 n" ?3 V% r" c7 g
var Diags = xdc.useModule('xdc.runtime.Diags');
. ~4 G' q2 F8 t/ g0 r! p5 Tvar Defaults = xdc.useModule('xdc.runtime.Defaults');- B* h+ G% [& O2 R9 i
. P  O  l1 Y2 R1 g; J  o, ?
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
1 R, L; X7 r8 ZDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
' v  Q+ g! A# P( A9 @- a- jDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
# u* q; {0 c6 ]3 fDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
) _" H" V0 o, ~; EDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
* P/ v) Z0 m) e* `# p# vDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;* H$ i3 l6 F' l+ R' A' O; X9 V8 w
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;* P9 m" Q* Z! H. E
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;" Z! |- m  E' }2 l) P8 f4 D
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;7 [) E+ Z0 Q  h( M# y! `
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;& ]' x  a, `1 P" d7 K' D" c, ?% ]
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
6 z2 V3 k. j1 d/ ~5 J8 pDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
' l% N: D$ g) ]7 C% T1 n5 y  yDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
0 i: o) B6 b) l; B8 f# U; tDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;5 I. K6 C; _4 e5 \) t

- A5 z4 @1 Y# s/* override diags mask for selected modules */+ s2 Z* T8 S# K% w
xdc.useModule('xdc.runtime.Main');& B, K* ]) Y) j+ K, _  N1 s4 A
Diags.setMaskMeta(1 h$ \. b3 Q6 Y: l. N4 g+ f
    "xdc.runtime.Main",' I; C" Y1 e& G; A# A
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
% W9 a& f4 Y: y    Diags.RUNTIME_ON
& ^! y/ z8 @+ x) u1 `" A);$ _5 s4 Q7 k3 ^) ^

" H& i& v$ u. ]3 tvar Registry = xdc.useModule('xdc.runtime.Registry');- I+ e# J% U+ j
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;+ p- W! f5 C# `0 h- ]
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;4 g* R6 ^7 U/ N- \, A9 s+ O
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;4 J2 ~3 I3 d9 ^/ K5 V" N- d
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;1 M$ S, E0 u1 s6 l
# a# R3 u9 ~9 S5 I8 V, n3 c% F
/* create a logger instance */
- x# m: F. ]5 X" Avar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
0 f& t- ]/ `3 c3 }3 svar loggerBufP = new LoggerBuf.Params();
% {4 j! \2 a- l/ f( qloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */8 E& h; u$ a# B
loggerBufP.bufType = LoggerBuf.BufType_FIXED;& v' ~- `' X2 H# n

4 k0 }0 L: D# H0 m; X: W$ S9 _var appLogger = LoggerBuf.create(loggerBufP);; K" j% G$ W. U5 [
appLogger.instance.name = "AppLog_Core1";
4 E7 J$ N5 c) D# V9 }; XDefaults.common$.logger = appLogger;
5 ?3 F5 b; _9 Q( p( WMemory.defaultHeapSize = 0x8192;    2 Y' q: m, v* X; ^
Idle.idleFxns[0] = "&LEDStatus";3 q8 G3 w. ]* W- v) \
Cache.initSize.l2Size = Cache.L2Size_32K;2 c/ a/ b# w' F, @' t2 c# w4 G

6 s- r: B6 r  P- C/ Z5 A- |7 G
回复 支持 反对

使用道具 举报

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/ ?! A% Q# _var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');/ ^4 w. h: f3 f" ]7 `8 d
var heapMemParams = new HeapMem.Params();1 M: d# @2 o5 r
heapMemParams.size = 0x4000;
4 ]( t( x8 _2 q+ I
8 Q$ O" n4 ], o0 Z) ?var Memory = xdc.useModule('xdc.runtime.Memory');
+ v$ ]5 I' z3 ^7 BMemory.defaultHeapInstance = HeapMem.create(heapMemParams);: ]9 p0 \) b7 O- a

" l2 ^( R' p5 p, M我大约calloc  每次共计大小为5K*16bits,
8 l8 o0 g' {# e3 f而默认配置才0x4000、需要改大。6 g( ~1 f# ^9 P8 B
- |% R% A5 O6 a1 X/ `3 y: C
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
+ L% m- D$ `/ v, y4 |Program.heap = 0;% G+ {5 W5 v: D, t' x; N. N$ T
Program.argSize = 100;  /* minimum size */
0 E2 X. }- X6 m7 h2 b. dProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-16 07:57 , Processed in 0.043560 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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