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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

0 x; o" l- T# R+ k! F- F3 |' g7 {    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256  u3 E# {- b) v; G* j
. o, l9 r9 K- U0 G, g
其他程序段。。。。。
* B; d0 G3 z5 p7 c! G 0 e, Q' h7 M6 x0 F- C% h& H/ M
   free(x_d);
& i5 e& ]  {% t; w/ L. k& g0 V  Z
& f# P! o, k- X! a0 Q3 B6 L使用DSP侧单独调试功能,验证动态申请没有问题,
* x- C5 R8 i, z
3 P& i0 s; h: [6 O% a0 @2 Y但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。: ^1 J7 N. ^3 F; w

5 J8 H6 P$ u) W* i+ \3 M0 n# l1 h& X3 R) K9 n& ]% O

8 y$ C, l3 P& J: U7 a6 D1 Y0 b3 h
+ d) o, g1 u! s' j
6 c! v0 Q; Q7 ]# W" h1 V8 z5 }1 M

) Q8 V) |5 D! k# Z# @1 v8 M0 f7 U" T* ]8 @. }& ^* o% Q; l0 j

" Y  k1 ]4 [  d2 u( V8 F
% H4 x, u' y9 C' m( P
分享到:  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 */
; x* `; X7 \6 F3 ~( b) q+ SProgram.heap = 0;0 l9 o  x5 s, |$ o# S! P& u
Program.argSize = 100;  /* minimum size */' b. r5 E2 j5 p( D) S" F2 e
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
3 |5 r$ _$ ~% Mvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
. U; V1 h; I$ R' g! N+ nvar heapMemParams = new HeapMem.Params();
3 e, Z" I! s4 Z8 A8 B! EheapMemParams.size = 0x4000;
. J7 n5 V! u, M! P( P9 E7 i, _3 Y9 z; E/ n2 [- G
var Memory = xdc.useModule('xdc.runtime.Memory');
+ e: k9 h; l1 sMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
. z5 T- A& D) L3 }0 C6 N4 o
. X' X! H& v( T: ~  v1 p我大约calloc  每次共计大小为5K*16bits,$ {4 l. }- }8 L
而默认配置才0x4000、需要改大。: Q* `- P) A0 z5 p3 K- ]

/ D% o- ]: C$ T2 [5 N
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明
# j3 b6 N# G0 T6 l2 Z4 q我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下* x' \( z9 j; ^9 S8 H7 K
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)9 r6 G; d3 m5 I' P9 K
1 |- l; @0 m9 M# b
是不是需要在DSP.CFG中进行配置" m- r+ u8 N6 I+ b
我现在的配置为
1 m. \1 {7 w& G
1 N9 z* r6 e% C: e5 {/*# Y$ U7 E$ B% B1 ]) v- I/ B
*  ======== Operating System Configuration ========* P  L; y$ {+ g" q6 d
*/
  D# R$ x1 |1 i" _6 E. o1 n
. c! s# T; v0 F. r/* no rts heap */( ^& v3 V1 I9 }6 C) E8 R! o
Program.heap = 0;
/ U( V: u3 p& j# P) x0 |Program.argSize = 100;  /* minimum size */
6 s7 w9 l6 n% U7 r1 {Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大5 ~$ u% N6 u2 S' Y
# z1 n! j* v( U4 p
/* create a default heap */: F% P* ?; }' y, x3 j& A5 Q  D$ h
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');& ]5 Q; m' j% M+ e5 u- e
var heapMemParams = new HeapMem.Params();
4 r9 T+ H5 z, r$ Y/ S4 x* |heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
, k( G7 H8 ^0 G" u1 K
+ i/ y* {6 M9 z
var Memory = xdc.useModule('xdc.runtime.Memory');1 n6 x7 |$ Q* \6 A# M$ ]8 Z
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);& ?2 N$ y0 E2 J7 @
, ^3 T; K* x( L7 q( g) [
/* configure System module */
! G$ \) D- f' v) g% U, J& Qvar SysMin = xdc.useModule('xdc.runtime.SysMin');
% g8 v  t: u2 Z7 aSysMin.bufSize = 0x1000;* \. Z) d5 g) N) u
SysMin.flushAtExit = false;& q. U7 ~  ]( N% b2 G; a5 P) u
! P0 f# O( s/ E( }
var System = xdc.useModule('xdc.runtime.System');
# H  ?+ b7 J" ^2 p$ V8 `* mSystem.SupportProxy = SysMin;. m' `9 s2 C" ^# c9 r

1 z, n" ~- T4 o: }7 G/* configure SysBios to use the lower half of Timer 1 */
  t: k' M3 R$ l  F0 h, H% cvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');4 p6 C+ h6 y5 \/ U
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
! ~7 M6 k$ ~) a5 w* KTimer.timerSettings[1].master = true;
. E5 C; u; ~5 p0 @/ N# sTimer.defaultHalf = Timer.Half_LOWER;4 f- }0 y/ N0 Z7 w
Clock.timerId = 1;5 m' x  S/ O' B0 o$ o# }9 z( c3 A

; o9 b! n0 Y  q0 K1 X; K* X4 Z$ J& L: o+ z4 ^
/*( \5 N: ~3 `7 O
*  ======== Miscellaneous Configuration ========: o1 K" D  @' j+ a- y
*/; A3 W( K' ?1 a5 \

& K1 E& G; |* F/* set default diags mask */
3 `& B: n  s1 J" A3 ~9 [+ yvar Diags = xdc.useModule('xdc.runtime.Diags');
) Q8 S( L3 T. W: L( v; e+ Uvar Defaults = xdc.useModule('xdc.runtime.Defaults');' q0 O: @4 c7 @" o8 |

2 d/ b1 c) E& H( |6 a) [Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;- R% I% e7 \  a0 U9 I9 a
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;, k7 j( b  @$ w# V4 p4 A
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;. `- t9 [( r3 ]
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */5 o# e- ?5 a) O) o: U0 P& a2 Q
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
+ Z! m  o" L' T* E) \8 E  tDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;. N6 ]2 i6 W. N
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
  Y7 J3 s+ B- C/ C* gDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;% C2 O, R2 l- B+ Q% a8 E2 U- O5 s% \
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
$ b* A# G# Q) y) n! ]" sDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
/ l/ D: f; ^- K/ T  XDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
' K& H( t. }5 t; ]$ B4 jDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;" O$ |1 B5 Q% \
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
1 _. B% k' ^5 K; m: W7 W& QDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;1 s! c) z- ^9 Y7 |& k3 J
  V: V, ]8 N2 [; F+ P
/* override diags mask for selected modules */
/ u7 O+ N+ h, U5 C! f' q# p' {& Fxdc.useModule('xdc.runtime.Main');4 [  U; n; r" }  q% {# v% f
Diags.setMaskMeta(
2 B1 j9 z6 o7 U0 R" F! B: |    "xdc.runtime.Main",
6 |& ?# l7 S8 o8 X4 v. O2 l, d" n3 Y    Diags.ENTRY | Diags.EXIT | Diags.INFO,
: K7 ]! F+ e3 L# q+ O; m3 R" R# {    Diags.RUNTIME_ON3 |. I' y+ ?8 z
);, K+ \/ ]0 a9 z/ c0 [0 \9 W& B

( b) g2 ]  o. ?7 g" M4 }var Registry = xdc.useModule('xdc.runtime.Registry');9 K7 {' T3 L" A4 G. O% n
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
+ Q6 j' M0 n! {' [3 WRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
6 z( C7 O! n$ M" n% j: L/ lRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;5 q2 u5 o! i+ g* K2 {# |
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
- q) `6 H9 C/ h8 z0 m; M  h& |* M; [- {' m. a  B
/* create a logger instance */  L) ?: m9 |. O: C4 T
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');2 T! i" B# }. M3 o
var loggerBufP = new LoggerBuf.Params();5 l$ w1 f- ~+ I2 Y4 X2 b. v6 T
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
2 F1 q' ?% m! ?loggerBufP.bufType = LoggerBuf.BufType_FIXED;
* c$ @. v5 P! J2 E# \: ]3 E+ q
/ |- k0 X! }& kvar appLogger = LoggerBuf.create(loggerBufP);
: R& G/ M& T* T2 AappLogger.instance.name = "AppLog_Core1";
; Z2 y3 z! S6 r; }( aDefaults.common$.logger = appLogger;# ~6 N; L2 s+ C
Memory.defaultHeapSize = 0x8192;    1 H. F7 g- l, B1 v4 Y3 t
Idle.idleFxns[0] = "&LEDStatus";2 }9 \+ ~" U5 d8 v0 K* X
Cache.initSize.l2Size = Cache.L2Size_32K;% w& z5 ^" l' Z4 N! U% p

6 Q* f0 y) u7 W# z2 X( a* e$ c. T
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-2 04:38 , Processed in 0.045988 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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