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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

& O. p& G' d: z' g" ~* ?    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
5 e9 L+ L- b4 ?: N' O
  ~# Y+ E' ]7 Z$ Y* j; w! |其他程序段。。。。。
  S" U8 M- _; h
4 p7 _4 ]9 [' @" d; H' A8 a! M   free(x_d);; d; u  z' d6 G* D+ Y4 v5 Y

8 M) a. Y$ k# y7 k1 @3 _使用DSP侧单独调试功能,验证动态申请没有问题,# C( {' p, n1 l- S, t
5 x7 j/ X8 Q. S
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
. U% s/ e0 G$ K, N: v9 B

% B% _9 O! ~  y4 N2 R) V* F# X. V0 R1 ^/ T
9 ]- q  W, M1 a1 O0 ~0 t! J9 ?
9 @' E, ^" X8 v: t

5 [; u) ?) F) w- P9 f/ Q% q' E' C% C
- T( k3 |- u# x! q
% o* w, l2 `0 S, q; g% j

/ P$ O+ R; W. w" `
' o$ k( v' O2 D2 ^6 I) P  f
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */. F! T5 [4 c. k6 e  P7 o/ m- y  n
Program.heap = 0;
& z- h( J' O4 yProgram.argSize = 100;  /* minimum size */0 M6 \7 ^, n, V; X) q' q+ s
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
( h. J% [5 s- J+ h- mvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');. P( l( }* |& v
var heapMemParams = new HeapMem.Params();
. E' E, J2 f- sheapMemParams.size = 0x4000;
2 l+ }2 E- r0 z2 _, [, t0 T! v4 b/ d- d& x$ M9 A! h
var Memory = xdc.useModule('xdc.runtime.Memory');5 M( x, c( i4 T
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
3 B5 {+ F* r) X2 `8 h" o0 g0 p; j! y( H: W7 I- R
我大约calloc  每次共计大小为5K*16bits,
+ z  h" H0 H" b' f* v# A# i而默认配置才0x4000、需要改大。/ J  K# d4 }$ s2 p
, u, g0 H+ m0 A- }5 g# K& _( I
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明6 T" J0 @$ T! w
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
+ L' F7 y; N! I5 W(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
: N+ ^2 S" P7 c5 a6 m2 k

4 S% {8 K3 N+ s9 T  z是不是需要在DSP.CFG中进行配置
$ W, u6 W* v( J6 t% o我现在的配置为( ]* A, o4 E. X0 D% G8 }

, Q; N0 f. ]- R/*
9 Q4 b) t" v+ F! g+ S8 H: K' e *  ======== Operating System Configuration ========0 S/ S9 L6 O$ I6 C* b. C
*/
$ l5 t# r2 c4 d7 O7 H5 p- w/ d+ x1 L
- E, O3 M0 }, ?+ q% M( r/ p* j/* no rts heap */9 B; N+ `, @5 H: X  R
Program.heap = 0;
9 T/ @8 P0 B6 J# KProgram.argSize = 100;  /* minimum size */* f, j! D4 `3 h
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
/ e, M' W7 T, q# b  a, r. K+ d: b3 x6 Q# z
/* create a default heap */
. t8 }4 H2 i( \) e# w. E9 evar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
% N( [2 h6 a+ f8 l8 b( Cvar heapMemParams = new HeapMem.Params();
' u' Y$ h0 p! `  ~heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
4 H8 z6 ~2 q2 o6 c1 b: U/ `8 n- b5 d6 P+ h( V" @, y
var Memory = xdc.useModule('xdc.runtime.Memory');- I, r$ d/ R* ~) _9 p7 A8 l/ O8 \
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
- W+ R! l0 E/ l, T+ g7 z0 J! s0 X6 L( Z9 q2 k6 u8 e4 v$ P
/* configure System module */. {  H) y: K1 t( ^$ r, J) G1 X
var SysMin = xdc.useModule('xdc.runtime.SysMin');
9 s. |7 ]. o& i, J1 vSysMin.bufSize = 0x1000;9 k0 H0 T' N4 ~) E! O! z
SysMin.flushAtExit = false;
' m- ]! h; k7 R# u; c$ B9 J) y
1 s. J2 d  M' M" ~var System = xdc.useModule('xdc.runtime.System');
% ?- b) ]( ]7 USystem.SupportProxy = SysMin;
. Y* E$ j: \# I; h& R  V1 O: c
1 Q. ~- f" S) ]& Z! P. u/* configure SysBios to use the lower half of Timer 1 */! T7 R0 T. R; c" E( E
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
2 w& g, \7 r  q. ?# T# ivar Clock = xdc.useModule('ti.sysbios.knl.Clock');
8 w6 Q6 W# S" \6 ZTimer.timerSettings[1].master = true;
: R- e' s+ i1 {& w* a* O; g- MTimer.defaultHalf = Timer.Half_LOWER;
% J% Q( c' Q$ {/ jClock.timerId = 1;
9 w6 }7 p  G0 m8 t. s- x5 ]( B
7 B4 w$ k3 A: }+ M6 J9 c/ S/ u8 h+ N' D# i; z8 R9 g+ |" a
/*
! t8 U! b/ l+ ?* U: q+ { *  ======== Miscellaneous Configuration ========
4 e+ s; [% l/ ^1 C; D5 j. _ */, d" i5 `6 [# Z' z4 x

0 L' S0 k/ D. k9 Z  \/* set default diags mask */
' ^6 |- H3 Y  ~var Diags = xdc.useModule('xdc.runtime.Diags');
6 o/ [! f' G- Svar Defaults = xdc.useModule('xdc.runtime.Defaults');
% b! n+ f+ r, b: g5 Z7 F& S7 A5 c: q( x% g' c
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;1 I! y# Q% a: q5 `
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
- ?4 ~& `5 n& Y+ k8 }  n4 wDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;- `* C  \6 b2 k* i4 K0 x- o$ \& c
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
1 T/ j4 ~; S- h9 S6 V$ T% Y" v$ p8 lDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
- |) j& i( i# V3 fDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
) X$ J+ Q6 V: e  q, tDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
8 e& F9 A4 P2 A  vDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
" G# k# s. h- c" A& `* t9 y' F7 zDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;, D# z( e+ \' Z( B3 I9 @1 X
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
3 T; f& h8 g0 G; t8 b/ H  fDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
. g! B' q9 L# F% sDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;& [7 ]8 g: @9 D% ~# e, ~
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
! F. @4 X& O# {* n% WDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;* b( C* C% M% z6 ?# ~; ~6 B
: B* s& f# m2 `' y4 W5 f% f
/* override diags mask for selected modules */" `3 O- r5 _! L: g% v
xdc.useModule('xdc.runtime.Main');) h9 ^7 N$ y, h6 ^# f5 n/ P- C8 R
Diags.setMaskMeta(
5 x" k3 O. c: y4 d; |    "xdc.runtime.Main",3 D  P9 k- }; x6 c
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
# f! h* y, i% s5 I6 c: r$ e: b    Diags.RUNTIME_ON5 F. L4 o' m/ y3 x/ ~1 h0 M
);
  g+ a% `7 u3 B: g9 p9 G6 n: P& H+ H" Z: n1 I( A5 ~4 z
var Registry = xdc.useModule('xdc.runtime.Registry');
8 Q; M0 |; x# U4 \Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
0 O( }' H0 E- q0 v: ]/ xRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
! V% v: }2 E& H# CRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
( X- `. M) H% q2 _5 o" a8 Q0 L: s, \Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;3 ]& C5 W; ^# o9 E  z

0 O7 Q* J3 z2 w; M% f/* create a logger instance */# l3 M7 `5 o3 v6 J2 d
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');+ B/ X& b* \/ P( ?  |- Y
var loggerBufP = new LoggerBuf.Params();  [0 v6 e  t! g
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */2 S7 ?$ I3 J7 C' b. F
loggerBufP.bufType = LoggerBuf.BufType_FIXED;3 T, W. P/ u7 N/ c% t+ u- i
0 j% J9 J! H! D2 k" |* d
var appLogger = LoggerBuf.create(loggerBufP);
. t3 B4 D- C# D2 MappLogger.instance.name = "AppLog_Core1";
. {4 r* E2 G, [. jDefaults.common$.logger = appLogger;  U/ u& x) u3 }1 M) D$ m$ s' R
Memory.defaultHeapSize = 0x8192;    $ L$ ^$ y  U2 \1 ?4 Y
Idle.idleFxns[0] = "&LEDStatus";
9 F* W# A" }! E* a% OCache.initSize.l2Size = Cache.L2Size_32K;; P+ J9 U7 g5 O% F, r- Y$ s4 k/ j
0 A# [8 j- Q. a  `) t
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-4 18:17 , Processed in 0.046278 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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