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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

" q$ W/ g( _( c    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256: R, o! x: G3 ]2 g
, L, W7 g) e5 v# Q* K
其他程序段。。。。。
& m3 L& G6 B2 P3 ?$ f0 Z! B$ I
6 Z: p0 Q0 ?) D: d- ^* V   free(x_d);
- w# ?: ]1 A) g0 V/ @% H& ]; Q, O0 P; q  R6 ]* E
使用DSP侧单独调试功能,验证动态申请没有问题,
0 K4 O2 F& j; C/ C8 Z
! O7 K: a8 W2 n, d+ r/ Z但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。! y7 S. s6 U! ]" K3 v
6 ~4 E0 b: g1 n7 V  m

9 r( r6 e0 C# C, _7 v# N  h5 r6 o

5 K, R9 S9 w, Q
$ Z& \* Z& s* ]) m( F3 E
, @) @8 F$ |' \$ k. N1 f7 E, B; P2 U6 O4 M. p; h& U
/ K- ^" Z. V+ m, T. C' o
! F4 A+ m4 P7 ~- U! F# k
; r; |4 ?4 G+ d$ x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
' p( A* Y, {6 p4 ~; n我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
4 t5 Y- i  a/ n5 J(不过疑惑的是,为何单独DSP仿真就没有问题呢?): Y% o( ?# p( a9 \8 J

7 m4 p$ _& e4 e8 k4 g* O4 A是不是需要在DSP.CFG中进行配置" L; U8 \8 N9 @) ^8 d5 J# E! B
我现在的配置为4 e0 K' i$ q* j+ F# F4 E9 O

% Q) a0 a5 ]" `/ H# h+ f$ R  j/*1 O+ q  _% h/ h" ^0 m
*  ======== Operating System Configuration ========) Z0 j! F' m1 t
*/( {2 Q# L/ L9 e
+ h% N. }' o+ ~0 S7 K, S
/* no rts heap */
6 f! g$ |) Z+ _/ f6 HProgram.heap = 0;2 k! T& _/ r& ^- G5 F
Program.argSize = 100;  /* minimum size */
( Y. |& H/ u9 q4 ^Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
: u$ ~2 ~, F" Y8 v! r9 e# H
' o0 P; i( B% W$ ^( V8 R) y/* create a default heap */+ k  g0 O% U; s; {/ a& e
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
1 X( `$ p8 `, A6 Q9 x5 Gvar heapMemParams = new HeapMem.Params();" j. I, G8 ]) M  p. }6 {
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大* b7 s% ^% }5 A7 ~( E, k' B

% R( a2 W- k* P2 p& U5 L) b
var Memory = xdc.useModule('xdc.runtime.Memory');2 b& Q0 C$ Z7 `3 u  h% J  z: E( r
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
2 U# O; s# P6 g* e2 X
1 o$ C' U; t+ a  C+ p. i/* configure System module */* J9 j& ^) X1 m) R
var SysMin = xdc.useModule('xdc.runtime.SysMin');
* y. Z5 Z% J2 q# z7 `- `SysMin.bufSize = 0x1000;
8 L' F+ G" Z' O$ V1 \, E- C  uSysMin.flushAtExit = false;4 M0 d6 ?1 M, H8 y
  N  d+ C  H0 ]8 f& u8 x
var System = xdc.useModule('xdc.runtime.System');& N; `0 m2 ~) a( A( M  Q/ L
System.SupportProxy = SysMin;
# e8 [/ |$ b9 _. k% J+ y7 l2 Y5 @
! e' u5 n( _8 B: ~! Y) I  f  K" e/* configure SysBios to use the lower half of Timer 1 */) E* G+ }9 G% v5 j% c" R
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
! r3 Z- {! s% Z& X  Dvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
" i  n: C1 S* u2 STimer.timerSettings[1].master = true;
! t4 H2 a5 g4 JTimer.defaultHalf = Timer.Half_LOWER;5 d9 J  s& D0 S4 {3 x7 P3 z
Clock.timerId = 1;) d$ b+ K; V( ]1 v: F: d

' h3 g- l3 @! q% Q. \' _. F4 ?$ Q8 |
3 H2 g9 K; M6 J/*
  J# b, p1 w* B *  ======== Miscellaneous Configuration ========
% P# e: }9 |% M; d9 T) M1 i. k */
4 B5 t2 ?/ K3 s0 v6 M+ L" [" R- v' z. z* A3 }% C) W
/* set default diags mask */
3 T2 E( [# |# Rvar Diags = xdc.useModule('xdc.runtime.Diags');
& _) z  Y; i/ @4 S! W4 L( Evar Defaults = xdc.useModule('xdc.runtime.Defaults');
/ a) h' t+ q% |( Z: R& A; L. e! I6 R) p
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
  t. \! ]& _0 N) N! |0 \" BDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;9 D+ _5 B  `8 e8 b7 `2 _5 ~
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;8 J* ~  C  }" j- t
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
: F# e9 i, X# u9 _! {Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */: Y# J$ y+ L( K/ V1 a; y) G, T
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;/ B3 \% j' Y8 X3 p$ c
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
8 `! C5 P5 ^! j$ tDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
7 N: l$ q2 x! o9 N; CDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;( H) Q/ p. a- d. S
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;) u6 P4 S7 s% K3 N! H
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
" P  R( J4 L' F6 y# cDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;, L0 e) c5 k+ }0 E- K: s7 o
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;- a& P" T$ w5 ~& [
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;  X. G& y8 ?- K

/ {4 X* e$ x: [, D2 G/* override diags mask for selected modules */
! C  q! ^+ {) U$ Ixdc.useModule('xdc.runtime.Main');
# y' w7 H9 N( Y2 W5 E7 k! I% Y: WDiags.setMaskMeta(2 w# T. E6 |3 `0 K% A
    "xdc.runtime.Main",
7 |" W3 W7 L  v/ g: F+ t    Diags.ENTRY | Diags.EXIT | Diags.INFO,
" t  C4 O; b6 \. f% t/ n; a9 r    Diags.RUNTIME_ON) g( n% I% [: m# z' r* ^
);/ K3 t( }. J% ^( U' k* j+ u9 X2 g; ]
# _& Y  u" n. b. E
var Registry = xdc.useModule('xdc.runtime.Registry');7 o3 Y+ D8 [( b* t0 `4 S/ Y
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
! W$ S- k8 d7 Q$ w, ?9 a5 y) NRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
% ~$ g3 c5 ^7 j3 O7 R' |Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
% [0 ^6 N+ ]+ e" Q$ Y) @Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
. ?1 c  A1 @9 h4 a/ s; l$ y2 c
/ e  o' |. Z4 o" P$ J3 r/* create a logger instance */* Q' B& a! P# n) H% m$ e; S# G
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');% Y% J& i  |" {  G
var loggerBufP = new LoggerBuf.Params();
- Z0 b5 g' k5 c) XloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */& B, x, t+ ^% X$ c6 }2 Q1 |
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
8 |" ~$ _% r8 t  I1 c2 L: h4 l" `/ R$ |$ [! L
var appLogger = LoggerBuf.create(loggerBufP);) |( n3 ^2 y: ]6 k% C" _7 F' W
appLogger.instance.name = "AppLog_Core1";
  p' L* G2 _0 ]; e# SDefaults.common$.logger = appLogger;
9 ]# e9 h) T' pMemory.defaultHeapSize = 0x8192;    , l, i. W' |/ w" Q
Idle.idleFxns[0] = "&LEDStatus";3 a1 u/ I* m$ R# r6 U& a# {
Cache.initSize.l2Size = Cache.L2Size_32K;
0 |+ ?2 c1 }5 O9 r4 P1 Y* D
& j9 Q, P7 j  h* P
回复 支持 反对

使用道具 举报

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 W, D* O( `/ J9 G- D# }" a6 g6 o0 Vvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
+ @$ U* {3 Z; {- o- lvar heapMemParams = new HeapMem.Params();
$ j2 X. l8 l& M& j; NheapMemParams.size = 0x4000;
. C, J: r+ d1 K' G- f: _
+ O2 O* Q" S* N- @( t, }, pvar Memory = xdc.useModule('xdc.runtime.Memory');5 O  a9 T) ]4 L- N
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);( p  P* n3 L+ @! t! e, r- c, ~

1 Q$ A4 w; \/ c% G5 ~我大约calloc  每次共计大小为5K*16bits,& [$ S( e, f  g( g2 |7 M
而默认配置才0x4000、需要改大。
; g" u6 Q1 B, J+ F. a+ \
& a% \. g# x4 j" k) v4 G- t5 D
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */" W4 f* S' f' c
Program.heap = 0;
" ?8 u7 ]' x$ g" z9 c/ d, @Program.argSize = 100;  /* minimum size */
% |- e; W6 q& CProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-23 17:25 , Processed in 0.042498 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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