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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
% n6 ]4 C( `! a, g: m. p3 V( ~$ B! L
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
3 j6 ^% A& M$ Y3 I' d" S) H
1 m% `* U+ z" j( b7 q4 ~: v- @其他程序段。。。。。
& L, B% S! @' |! r6 t3 P
/ i( N  o1 B( F, L0 c. E   free(x_d);
% n2 s0 f$ s' t) I3 I' T+ e' x7 Q4 n4 j& C& {
使用DSP侧单独调试功能,验证动态申请没有问题,
' z; D, y, m% h4 j; R1 r7 p' ~$ c- @/ E
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
% P# v) N/ q! J4 ?8 ~) T
% g9 U$ f" @  I5 {% Z

  _8 A, X0 Z* p/ S& l9 i
/ y3 J% @3 X, i/ |
" R4 J5 l' v3 Q8 w. ^8 y
8 h. g) t) C7 e$ u1 M0 [! v9 P8 ^& C3 o  W1 {5 Q6 H+ o" f. ~. z7 q

9 ]+ r# G3 x; U( a; W
0 ]& i/ c2 Q& d
3 p+ b4 w2 I6 F. s7 v3 ]
/ U' ]' F& S% i% C2 X
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
2 K+ L5 a0 T8 V* b, l  y0 r8 U我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下1 @5 d8 E, ]# N* \& K9 f
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)) {/ F1 I2 p8 A- E2 a# j/ y1 w3 J
9 O/ J) w4 R: y3 a, T3 X& a* b
是不是需要在DSP.CFG中进行配置, x' N  v3 R& n. |" o7 A8 i, F
我现在的配置为
: W7 O4 m; p) |! @6 |: ?, q3 [4 P2 b& N, \
/*5 T0 w+ @% ?* Z
*  ======== Operating System Configuration ========7 i9 J6 e# K$ M8 i
*/
% B9 \2 _) R* n3 G7 V3 g$ c2 g8 h% d6 A+ L  x
/* no rts heap */
2 y8 \5 f1 w# q! E7 g; tProgram.heap = 0;& S1 e6 M: b/ o8 J" D/ k" l
Program.argSize = 100;  /* minimum size */0 I4 a( f+ O# [
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
: w& p& N& l4 C, K: \! e
" E5 F" j- @% n. S0 b/* create a default heap */
; a& c, y; h: f3 B" Rvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
8 f- V/ P; X+ q) n" qvar heapMemParams = new HeapMem.Params();9 L. o/ Q' u5 G
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大' N% b& |$ u% x# d: M7 G

, c4 V' P3 w/ z2 |1 b7 M) C/ y$ G
var Memory = xdc.useModule('xdc.runtime.Memory');
- A! M2 V* A; l- }# FMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
8 f9 }+ A. w/ V0 C' [
6 I% ?% ]" h/ ^/* configure System module */& I. O7 H1 b3 q# ^/ G5 G
var SysMin = xdc.useModule('xdc.runtime.SysMin');3 D5 S6 T5 C" A% z6 D6 X
SysMin.bufSize = 0x1000;
* W; Y& j( m# D* P( k, sSysMin.flushAtExit = false;
$ l( H' B' q/ C2 e6 ]% H& w0 n6 x0 d2 `  ?; q  c9 n* E
var System = xdc.useModule('xdc.runtime.System');; i) e6 |! x: F/ ^! |- j
System.SupportProxy = SysMin;
. |6 [: L( u* F6 q4 W# C2 A9 C7 P. C8 e. {/ a' Z/ ?8 g; }
/* configure SysBios to use the lower half of Timer 1 */
' R1 y. [' x0 Dvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');( J% T& I5 ^  y; `  f
var Clock = xdc.useModule('ti.sysbios.knl.Clock');: a: D6 t/ ]+ F! E' {8 S( ?
Timer.timerSettings[1].master = true;
8 G% e, K3 x  |6 \! i$ t! {Timer.defaultHalf = Timer.Half_LOWER;7 G, O* e% D* W( g: z5 G
Clock.timerId = 1;
) \1 X. M$ u$ ?, y# \* j7 N0 C' X5 Q3 u: S
  W* m% S! z# c5 r1 C6 p5 m; r
/*
* q2 N7 r- {8 Q! o' |$ @1 N *  ======== Miscellaneous Configuration ========2 ~/ w& J( H- C! k
*/
. g; r2 F) E7 m
; t. k( Y$ M# F/ Y) s& N2 A* B/* set default diags mask */
& Z. e+ g* W$ ^5 p. k: p8 |: Bvar Diags = xdc.useModule('xdc.runtime.Diags');
2 K7 t, i2 M) {* zvar Defaults = xdc.useModule('xdc.runtime.Defaults');
2 A0 p1 g  x% @5 y
- m- i2 R# `" |* Z0 t3 hDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
/ E$ W  ~# }6 t6 W) f% NDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
0 W) ^& d' L; q; aDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;2 U$ C/ d' o2 w9 ~0 b! y  u
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
! U5 u$ `# @9 v3 p7 \4 n) _5 vDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
: a2 H- P9 ?! g. o2 |! x  l$ XDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
' i" t: W% K: b% D% m; @! {  KDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
3 |% @" u0 C5 B4 _$ ^Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
: E4 C9 X7 n# `( u2 P6 C0 o* cDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
8 M& r" N3 s( F$ NDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
" Q, I6 m, @/ q2 kDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
4 p$ d+ p  Q7 L$ q) g: R3 d; fDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;0 o8 b% G$ X6 f  Z! h" c
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
9 s  S# w6 _" H  g" ]Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;) v# L/ J$ N- w1 b  R+ D7 G
; K" D0 L" l; l7 H9 U
/* override diags mask for selected modules */0 C7 [* o# N& ~
xdc.useModule('xdc.runtime.Main');
/ q: c7 Z4 x- {  W; V0 m- p! l( H* wDiags.setMaskMeta(
, A8 |8 k; K$ z" e7 s$ l/ g    "xdc.runtime.Main",
! t& G9 r  s; v1 F& `3 i0 F7 |    Diags.ENTRY | Diags.EXIT | Diags.INFO,
7 G* ~$ b" I3 `    Diags.RUNTIME_ON1 }' x' k2 s6 d8 H. \3 w9 X
);
1 N# A2 G, `7 P$ l# V4 N! H+ o$ Z. p6 X
var Registry = xdc.useModule('xdc.runtime.Registry');
, ?6 O1 \! T4 S* [# |7 A% q6 RRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
6 X0 v: q6 F8 eRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;+ E, @9 Q6 v6 ~8 `& n4 }0 |3 U
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
: S' h& K/ M+ U$ BRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;7 `+ t7 f3 Q' c9 }9 \
5 e  M; X. u  U& r
/* create a logger instance */
8 z9 i. Y/ h' v! f3 D, D) Nvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');9 @: l" z) D3 [# {4 R1 \" U
var loggerBufP = new LoggerBuf.Params();* F, D/ O# C$ D7 x  ^6 g" L- O
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
* T8 l# {, T% n  jloggerBufP.bufType = LoggerBuf.BufType_FIXED;. B  b0 K8 E$ o: u5 U, d
, q- k$ ?) k% }
var appLogger = LoggerBuf.create(loggerBufP);
9 @6 ~7 I! V. B- E. OappLogger.instance.name = "AppLog_Core1";; k& ?# n4 s+ ]0 V+ c4 [
Defaults.common$.logger = appLogger;1 a2 \" f! f4 O6 y5 p8 o2 M$ ]
Memory.defaultHeapSize = 0x8192;    ( s1 T! x- a* Z% K, b& g% U
Idle.idleFxns[0] = "&LEDStatus";
3 q/ i+ @7 x) G/ E4 JCache.initSize.l2Size = Cache.L2Size_32K;" Z7 a% T6 ~% j, c! F7 r0 _: w1 p( D

2 R) \6 i' t/ E! m1 B( ~! H
回复 支持 反对

使用道具 举报

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 */
8 ]; d# B8 l, p, M  y  r1 nvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');0 a. h; ~: P& `/ Z3 c2 }3 C: U
var heapMemParams = new HeapMem.Params();' y4 s7 x9 [8 b) d  e7 _
heapMemParams.size = 0x4000;* V2 v' r: @* e/ }

" T; h! W. [+ N5 Z  mvar Memory = xdc.useModule('xdc.runtime.Memory');) @' x; O4 g8 K1 F- [6 Q) ?' l* B% X
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
* C. {$ ?! H: ?9 k) w' }. A3 |* H1 {7 u) A+ {( g
我大约calloc  每次共计大小为5K*16bits,! y; E: p  a% ~' r. r/ s9 K' f
而默认配置才0x4000、需要改大。
; x, v/ ^, v1 G: \. Z0 |! X: M1 c- E; B# X' K0 C8 P
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
/ U- P, Q7 @  k* N. [. VProgram.heap = 0;' V- l2 k7 l6 j3 h0 s; z# T
Program.argSize = 100;  /* minimum size */9 f% z% k+ j1 a# C! F  z  ]& q1 w! d+ u+ w
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 03:09 , Processed in 0.047288 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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