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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
) Z. E, \6 B- I! r$ s2 O7 Z% Z& B! w; h% W( e& t
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2565 F9 V8 u9 N# N9 V& k% ^

2 r9 n' k' P( X其他程序段。。。。。3 F9 U$ S0 c- @. D

: W' Z" F7 P! T: a   free(x_d);
, A" I( @4 T' T9 {: d% j& m' E$ {( C6 v; b9 W
使用DSP侧单独调试功能,验证动态申请没有问题,
8 V9 T+ s3 Q6 B( ~4 H: t3 E" J. L. f, ^% |' I4 M
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
7 Y4 }; o3 H; n' a" Z- n1 |
# q7 n6 H' V, D5 R8 _( n1 m3 w
& w* J7 `) `: [7 |$ o( J
: a/ a3 [1 x* W
+ E0 m, f$ j1 i6 m8 ~( I" H
1 J  r6 \5 X3 l' x9 o$ k' I9 q/ d

6 C- N1 P' E$ c4 ^, d7 W
) g1 [5 Y6 {7 v, o
- n1 i8 _7 s  ~+ D
- S" u3 d) e3 }8 F2 e: S) e/ G4 b7 |4 }
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明" `( j, [% q9 V7 [) {3 z
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
+ R! _" A: ?3 n' z(不过疑惑的是,为何单独DSP仿真就没有问题呢?)# d+ e9 w5 u. s  S

4 P6 j9 p4 P$ f* J& b* O是不是需要在DSP.CFG中进行配置" u$ M5 y2 Z% L0 r+ j* H; w
我现在的配置为
3 Y" _+ E  y* C. d3 y. g, ?: c# [  H& ^. O6 i' _; @/ j
/*6 y$ x$ r9 G" f! Y  b
*  ======== Operating System Configuration ========5 Q8 W: s3 W5 o* \3 m8 P
*/6 O7 A& o1 e/ V/ l
4 a: W2 f' G- l, g) f6 E! z
/* no rts heap */6 L3 p1 }8 B! P% f% X3 k4 t% ]7 `
Program.heap = 0;
9 f  k5 T& T: `8 mProgram.argSize = 100;  /* minimum size */
/ Y% ^" {6 X- gProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大" d% M$ R8 _; T9 E" [. ]
" }2 ^1 F6 _* B9 s2 I
/* create a default heap */
& D8 k" ^* K. _: Z! Nvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');5 b2 x5 W8 ~: k/ x6 C
var heapMemParams = new HeapMem.Params();9 A6 r" H0 J# ?3 }+ J7 D& X& m
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
) \: M/ j  B) u2 x2 `1 y/ @  B* \  }8 \$ o2 a/ w" @
var Memory = xdc.useModule('xdc.runtime.Memory');+ R/ |3 {* S! L0 H& y! |0 R
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
* g2 u! _* D0 u* K& w* J7 w, G( [+ ]( i1 B6 l( c9 x5 j, O# @
/* configure System module */
; a! v& E% G  s( svar SysMin = xdc.useModule('xdc.runtime.SysMin');
* b" A1 B1 I. l5 D+ aSysMin.bufSize = 0x1000;5 Q6 _- X8 ^  w' P, }6 V+ l* p
SysMin.flushAtExit = false;* h1 ~  ^6 o6 L5 C6 {
% |6 X8 C2 R9 I7 l  f
var System = xdc.useModule('xdc.runtime.System');
' y' ^, c2 h7 t, m$ w3 VSystem.SupportProxy = SysMin;
7 v' f+ l4 R' U, o$ O! S' G& h. S) t2 L& g: S2 h( @  O
/* configure SysBios to use the lower half of Timer 1 */
6 O8 V$ }& L% P2 s& M5 R! \var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');  ~2 Y! ?+ p" Q8 r9 U
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
7 B) ~; E; Z$ F- B% UTimer.timerSettings[1].master = true;
. }( A; h0 w& S# ~$ l2 tTimer.defaultHalf = Timer.Half_LOWER;
+ C# `: X2 E2 z$ d2 L9 j8 t8 ZClock.timerId = 1;. E  g( C. @" G) C5 G) \* o

/ V6 h0 r* @6 w4 y2 B
3 \8 |5 s( E5 L: g# C, L$ C) \/*% p( w5 k- o6 F: Q7 s7 L
*  ======== Miscellaneous Configuration ========
7 J, O* ~/ k3 X0 l *// J" W+ Z, X) D/ k) d# x7 A
! ^2 v/ _2 H2 C) \+ |8 p
/* set default diags mask */& @' c# ^( G0 {6 I- R
var Diags = xdc.useModule('xdc.runtime.Diags');
! G2 N4 |" T, A/ V, T2 fvar Defaults = xdc.useModule('xdc.runtime.Defaults');
/ z0 w* D# C3 A7 `8 ~( J# E" N5 F) Q
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;: y& u0 z$ b0 Q( k$ ?
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
+ l2 }' y6 ?/ J" h: j% L% fDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
, a) B1 F9 E& h* M# |$ I9 c  o  fDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */' \. Z! V3 L* i+ ]5 |0 |
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
+ L9 Z: X4 P9 G* I8 T+ bDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
" a- m' S/ W/ B: w0 S, n% f  QDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
+ }+ o. t+ ~) T! n5 sDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
% @. O5 x9 A3 `; LDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
7 F- L. M0 ]; J% k" K/ {4 |Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
' q- E- f. h3 q2 ?; Q& R$ o% IDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
0 i& {/ F7 V" x, b# \Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
  Y7 l2 x6 G! V" H) VDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;/ Z1 R' y0 m  W4 j; t
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;% Z: B+ A* F0 H" L
; \+ g) D% x7 W1 P6 Y- r% S& a+ m
/* override diags mask for selected modules */
) H# j: a6 Y, jxdc.useModule('xdc.runtime.Main');
" k4 o+ Y4 [+ Z& j  v+ A# a" w) b* Z  EDiags.setMaskMeta(
1 C; P8 }, I$ L) y; E; r4 M    "xdc.runtime.Main",
/ U+ ]/ \0 V+ h" |  N    Diags.ENTRY | Diags.EXIT | Diags.INFO,
" f+ k( j& @- \, [! k0 D    Diags.RUNTIME_ON) c* r/ g8 y# W0 ^/ I9 }
);' e8 l. O; i9 }
  n8 v4 K, K& q0 f5 ^
var Registry = xdc.useModule('xdc.runtime.Registry');* v+ l2 \( f- w/ S# W
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
. a9 t) ?0 n, g4 r& xRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
9 K) p: \( m1 M' X4 v# q3 F3 vRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
  c9 Y" K3 s) k2 K% ?. l& D7 ?Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;8 _5 o( m, k* w# t

3 w7 h, {9 g" l+ u( m3 `% g/* create a logger instance */
  C% u4 d# q$ \& X  ~var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');0 J9 m' B0 [7 i+ `
var loggerBufP = new LoggerBuf.Params();
8 ]' g+ ?# m' x5 N( k) WloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
- Q2 {% w" F; MloggerBufP.bufType = LoggerBuf.BufType_FIXED;0 j3 s2 R6 O' g3 ~6 O* _
/ r( Z/ w9 F5 t  ?
var appLogger = LoggerBuf.create(loggerBufP);$ b2 M6 \$ U3 `' s' C
appLogger.instance.name = "AppLog_Core1";
4 ]2 k6 K, x* F* y& U9 q% B# iDefaults.common$.logger = appLogger;
' Q% s9 `7 r3 d1 @; {; YMemory.defaultHeapSize = 0x8192;   
; T$ K% s" J/ p0 g/ u/ B0 b) k) m1 V6 sIdle.idleFxns[0] = "&LEDStatus";3 x7 T' C' ]' A4 Q
Cache.initSize.l2Size = Cache.L2Size_32K;
0 M  v& E/ f$ p. e4 y. T  p; X, a  M& @9 }) }
回复 支持 反对

使用道具 举报

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 */% W8 m+ K" X, s( o# F+ o
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');6 j$ j# I& ^2 Q4 ^4 s
var heapMemParams = new HeapMem.Params();2 A) y2 [" g1 L, o2 |( V
heapMemParams.size = 0x4000;6 B8 d( v* _2 M$ T) I, N

+ q3 i! l" s8 x* F" G- _; [var Memory = xdc.useModule('xdc.runtime.Memory');/ i# z( ~6 M& o# y
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);. Z; S- _8 t$ ]# v* K3 F5 p* t2 p% U
6 d# |8 Y; d& z  x/ f5 R
我大约calloc  每次共计大小为5K*16bits,5 h: Q; x0 H  ]
而默认配置才0x4000、需要改大。; s/ C0 ^) o- V# q& W

% E3 B" ?: f, a9 K9 u7 e& x
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
: N6 a- r$ T/ t4 gProgram.heap = 0;+ R! Q1 a5 {- ^
Program.argSize = 100;  /* minimum size */
  j8 w" T0 X5 w6 u" M4 I: g5 Y% j0 @) v8 VProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-3 17:29 , Processed in 0.043677 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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