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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构0 K, S2 x* H0 _* v6 n
5 J  @( n9 D! r: a$ q
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256) F) k& Z. _: ]" O

; E: ~5 V, C: H7 N, m2 @6 e其他程序段。。。。。6 f1 j- x- X, y. l  ]9 M

; D8 W! P4 n& @   free(x_d);8 y% B8 a* H# i- H+ r( o! M

7 i( E/ I) @6 j/ Q% S, ]/ f0 |使用DSP侧单独调试功能,验证动态申请没有问题,7 m- `& F0 I$ @' p0 r& m
6 |8 F$ D- w2 R1 ~* r
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
$ X' A" f( K/ i9 Q4 N; d

2 I4 S$ j3 k* B* ~5 m3 h( s; Y6 c5 ]

/ }3 ?. S+ n! x, a, T$ Q, X
% }  L  N: z8 z/ b* o$ N% b, j+ B  W1 C  i7 s: u, U9 Y  X

2 T% A5 r( u3 m; H$ J1 P0 b6 O9 m( z9 E/ x
- d& E: ~8 F2 m4 @: x+ N
, W1 R" o' ]# X3 i
1 L# n* _9 m* m% N& U
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
, |: r0 i# Y; H+ R' z4 Z我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
1 X, L* q% S2 h% U  L. V9 j. ]. G(不过疑惑的是,为何单独DSP仿真就没有问题呢?)3 [+ z# M: s9 ]. S
: I# f* d, k) v* j
是不是需要在DSP.CFG中进行配置) d6 u3 u" c0 h+ X4 G# M
我现在的配置为
4 O- p) u' F" A) l) V9 E5 q
+ M  |% O8 y0 K/*
7 P* P' |6 o8 c; J/ E9 K *  ======== Operating System Configuration ========
( H  `5 n2 i# i2 H7 K( H */
8 ]! Z+ K. Z* U* C8 M; A1 x& c+ ~* [. q0 Q& y9 S" _
/* no rts heap */+ z' G( z: _: r2 J4 Q
Program.heap = 0;
- W! {+ }6 ]5 q0 ^) U$ k: g2 eProgram.argSize = 100;  /* minimum size */
* o6 N* m0 K( dProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
  M! `: H; V  A: W" W5 S* n4 i
0 x, D5 @% {& o! M2 |: i/* create a default heap */' _) [+ }7 d) z
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');0 _& f! _5 F; i$ |
var heapMemParams = new HeapMem.Params();1 L3 W! v9 ~5 m& \/ F1 {
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
0 P0 N3 v2 V4 c- k& i5 F  o
0 j" X9 |, V8 w8 F5 S; a
var Memory = xdc.useModule('xdc.runtime.Memory');, P& B. |2 Y$ v3 S0 w
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
  E9 p( H$ }- D( W7 X
4 D! z# }1 Q; U9 R9 I# t+ j$ I/* configure System module */
& E9 b% k- ~- p- ovar SysMin = xdc.useModule('xdc.runtime.SysMin');3 @; P" {8 O! T" m( h  l) ]" {' r
SysMin.bufSize = 0x1000;
4 g) `0 W1 D7 X4 ~3 \, ^. t0 m. OSysMin.flushAtExit = false;
+ H  C/ O+ @+ J3 S4 h" B' p0 b+ q* x
var System = xdc.useModule('xdc.runtime.System');
. `6 s+ S7 [, H$ C1 b- {System.SupportProxy = SysMin;  X. D0 ^! }1 E- w/ t+ {1 d1 z% |* ^
5 k. \* S; K* r: }8 s
/* configure SysBios to use the lower half of Timer 1 */
, ?* O" M& a. O) F/ N4 Fvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
- G0 B0 H  m" Z" j( H* m# `var Clock = xdc.useModule('ti.sysbios.knl.Clock');
, J# m3 |( l# }( ]+ _' l9 STimer.timerSettings[1].master = true;
5 A( ]+ W3 F' ]Timer.defaultHalf = Timer.Half_LOWER;) O0 j8 G$ S) Z9 @- w4 }/ Q; g
Clock.timerId = 1;9 g" V3 ]3 ?5 I1 L; P

6 X1 ?0 j6 K# M  D
+ V1 V- H1 \* T5 A  A7 \# x/*
, p. v9 g0 x+ g) V$ ? *  ======== Miscellaneous Configuration ========! {; |: q1 k1 `& H9 _
*/$ I7 x: A/ r* U( E
6 Q7 \; r. W1 `( L
/* set default diags mask */
; C) P/ F  D6 c1 n6 O  l8 svar Diags = xdc.useModule('xdc.runtime.Diags');8 u% n+ m$ I6 F& \" y  {: f
var Defaults = xdc.useModule('xdc.runtime.Defaults');: Z; G; q% n* B$ Q6 g/ P; a: H! X

7 y& l7 o1 x- _( X' ~Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;0 l& g) l( l% n1 h0 A$ V
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;  r7 {. _& m" r: i) Z& D
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;/ e& y. o6 u- I' g  Y9 j/ Q, I
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */) Y% L: ~/ r1 e: G" W$ c
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */! L5 W& {7 v' i5 y
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
& Z0 `8 j7 a& i+ iDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;2 ]8 ?% U' y* @& t4 j
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
2 J! O  N0 F4 R  Y% GDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
" D* }. ?; \) Q+ Y" p7 B* qDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
  M/ |+ |: l4 [% y. x# GDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
% f" i# O7 z  y. PDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;# n/ O9 u+ c7 ]% A0 X, V+ B" d3 s
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
- q; Y; \0 @- e! W- r; e1 UDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
" x+ e4 v8 A+ r' c% L9 |) @' K$ q$ H2 b9 B
/* override diags mask for selected modules */
8 `( V2 [2 k9 R% {2 O9 d9 Txdc.useModule('xdc.runtime.Main');
0 a+ ?6 t; r) p6 MDiags.setMaskMeta(( V* X# _. J/ G: x- {' {( D1 ?
    "xdc.runtime.Main",
, S; D5 f0 A$ |1 }8 m    Diags.ENTRY | Diags.EXIT | Diags.INFO,
7 t* |- ]* m3 k. G3 X% T+ {    Diags.RUNTIME_ON
1 {+ _7 ~/ h- `3 ?2 D3 M);
" {6 T' l, H. Z/ I- ]8 g$ Q) L# K8 u/ O5 g
var Registry = xdc.useModule('xdc.runtime.Registry');9 z6 O1 a/ q* v. J+ d
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
7 Q3 r4 X& W3 LRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;6 d6 S. y- U0 ?1 v- h1 ?
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
8 d: J9 ]8 ?! URegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
9 @3 |) W6 E5 v: J- E* [# I2 Y) C& i+ s5 u6 f3 a" V  \( g
/* create a logger instance */
& ^) L* _+ D% Evar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
4 q- u& t( P8 u" D8 x* ]var loggerBufP = new LoggerBuf.Params();
* D: _- ?2 |5 T9 T; O; b3 TloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */7 c: o# c0 o2 o5 C0 ]
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
2 G, `5 o6 O& l) Q! J
; a- m$ p; Z- Kvar appLogger = LoggerBuf.create(loggerBufP);3 q+ G% K6 H7 U, D9 l! {6 y
appLogger.instance.name = "AppLog_Core1";
' X2 Y6 H# f  D- p% X% rDefaults.common$.logger = appLogger;
8 i7 K+ K; ~& P1 ~8 }* P0 a/ DMemory.defaultHeapSize = 0x8192;    3 O  G5 m; o: I2 k% s7 o
Idle.idleFxns[0] = "&LEDStatus";
) Y  r: v* K6 z" \, ?7 yCache.initSize.l2Size = Cache.L2Size_32K;  Z+ G0 V, O$ l5 {! @* ^8 U

5 q( u7 L  i5 H: z# U5 [
回复 支持 反对

使用道具 举报

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 */& D; e5 ^3 l2 V- l* q; k( l
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');0 P7 L" Y1 X# T3 M" u0 k
var heapMemParams = new HeapMem.Params();
0 |* D3 j, @" k+ bheapMemParams.size = 0x4000;
& r$ ~" c; b1 T6 h: v
3 G2 T, [5 x0 o( o  r: k: A' pvar Memory = xdc.useModule('xdc.runtime.Memory');
7 z0 F9 O  \  t; z/ p1 W2 @$ qMemory.defaultHeapInstance = HeapMem.create(heapMemParams);% E1 y5 z& Z7 I1 O
8 h) Q7 P7 g8 F  P
我大约calloc  每次共计大小为5K*16bits,
6 ~2 Z' N; q; A6 f+ ~4 p$ U1 M0 }而默认配置才0x4000、需要改大。. ]- }1 N! d$ ?! k
2 o9 P& g9 r0 Y
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
( J$ |! r* y& AProgram.heap = 0;9 v& d& P! F9 n/ H
Program.argSize = 100;  /* minimum size */, v. F2 F* [9 i- K0 Z/ 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-3-4 02:19 , Processed in 0.041808 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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