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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构1 F! d3 N4 o4 K
) A3 @& c. t4 E2 b
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
  l5 k9 J7 ~# H. J) A$ @% ~, F. D6 [" [1 z- c# U6 f
其他程序段。。。。。% D- n3 h7 D, w1 h3 ?. v
% F0 \, |6 k7 G3 k6 b+ u
   free(x_d);
# w& J% y7 W* s9 D( R. y6 R/ o* n) u
使用DSP侧单独调试功能,验证动态申请没有问题,3 }/ L% q3 N/ X
/ j$ y/ m4 g4 `" {
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。" w- ]4 p) J6 K0 P! S, M

2 x) u+ N6 j( s( H
: W2 _5 K, f! t5 p; y! t
2 }" ~8 U8 S4 @2 W8 \1 p5 V
5 w+ j7 O8 _8 V( S! P  U# U) D# i. t: k+ D/ Q- d7 C
% w% Y- H+ `  q3 W) O( s3 q

0 C' g' M9 X, ?$ a! G$ _& V" I  v' R) P
4 x/ \- c* p/ M; l8 p+ h% }1 u: V

; g& e* v2 p. [" F. f- _! G- [
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
) d/ R/ g, X) J我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下0 I- _8 s. l# B, j
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)" r; j' f( [/ a. \: W, Q' T6 Y

9 g3 p1 }' B6 }9 |/ o9 V7 n是不是需要在DSP.CFG中进行配置& v6 d5 H9 }' N- Q6 m
我现在的配置为
9 k& T0 g5 w) w$ ^8 P- O4 f+ ~6 M7 m$ n! a: P: |3 C
/*
2 v7 r0 {; Y7 J" d& n9 } *  ======== Operating System Configuration ========7 W2 S  u! Q' R: j
*/
1 _' @4 A, D# ~0 E+ K2 t: W" {6 W7 a0 `" T
/* no rts heap */: {. F0 W5 Z9 X
Program.heap = 0;3 ~8 v1 Q8 L6 \  d2 \, S5 |* m
Program.argSize = 100;  /* minimum size */
2 _# V/ i  B5 T9 T! j4 @Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
8 `( [" x" ~$ M; a! H7 r& G5 a! H7 v
/* create a default heap */; I* H5 ~% q3 {: e
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');0 |' _* E2 W8 P% v* `/ f
var heapMemParams = new HeapMem.Params();
# m  D5 X4 b+ a" aheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
, G$ _2 S. J4 c" ]$ d( |( y9 f8 F
var Memory = xdc.useModule('xdc.runtime.Memory');1 k4 v; E& ]* p) l
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
2 K4 o' o0 Y% l+ `" g$ [5 v  n! r- E4 j
/* configure System module */
+ N+ z# h" f9 t" [: Wvar SysMin = xdc.useModule('xdc.runtime.SysMin');0 v6 h: X( x% U6 B! A3 [
SysMin.bufSize = 0x1000;: R) i, A: b- _" R; [. z; x
SysMin.flushAtExit = false;
/ C' u; I1 ~' S7 H, P
' m" Z6 u) v- D2 G: W4 q2 dvar System = xdc.useModule('xdc.runtime.System');- p5 |3 G4 E9 l# S
System.SupportProxy = SysMin;0 Z8 V6 M; \& [* [$ h! P& `
. J/ Q7 B" y, L" z$ ]
/* configure SysBios to use the lower half of Timer 1 */- ~* ^  d6 D( D1 v# u: J
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
) y/ W1 d( R# xvar Clock = xdc.useModule('ti.sysbios.knl.Clock');2 B* s. p; Z* F* n
Timer.timerSettings[1].master = true;
8 b2 A7 y: I! k, x2 E; Y7 A3 iTimer.defaultHalf = Timer.Half_LOWER;
3 p$ D% Z( b' ], i9 AClock.timerId = 1;; q0 M4 f: C! ]0 j; z0 Z
- I  U# }3 l, S$ {; P

6 Z# }! j9 Q) y6 C! L2 R& P/*
9 I2 [* E3 r6 F- B( Y2 x6 A *  ======== Miscellaneous Configuration ========
  E3 k  A1 A7 U) V$ C */# v# I. t/ T( B: Y9 W, v" t' ~, h
3 I, I( P. p$ o  s1 d
/* set default diags mask */
6 J) }. q4 I% N; V' }/ S9 Z, Qvar Diags = xdc.useModule('xdc.runtime.Diags');" g2 [3 F1 W. D0 _
var Defaults = xdc.useModule('xdc.runtime.Defaults');
6 |$ @) M6 X4 Z/ B: z% q& I, ~: a% Y) A/ U4 E# n: e* }2 A
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;  S* x, Q& T9 r
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
, e; L; n6 f6 I: o. x; xDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;5 J% @) E: Y2 r% F9 J; _7 W
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */. _6 t- m5 m; z
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */1 I% z2 X' E. p1 g) A- r7 y2 m
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
) U# ]- P% B. T* GDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;* P; d7 o( t6 M0 u
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
$ ?& I1 H9 u8 ^* F0 F' [Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
+ `# h' w- R+ T7 Z( c, i( C4 bDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;9 `: ?1 G, I; y0 p; N
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
% {! j  R0 @) m' d. iDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;8 I9 U& p5 g; N  A; O2 {
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
: {" R/ B% j. I8 }Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
: X$ ?/ Q6 b- m. z7 g' C0 {8 V# \' u) U- y3 h
/* override diags mask for selected modules */4 T  ?* s7 j' R
xdc.useModule('xdc.runtime.Main');  m' P: E& u1 E2 }$ k; k5 x
Diags.setMaskMeta(( G( a8 O* p6 W' M8 l& X
    "xdc.runtime.Main",8 P7 B/ s; z0 j8 F5 y/ L& Y( a
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
0 a" k% D6 V  l& Q5 `  H; _    Diags.RUNTIME_ON% p/ }& |4 h- Q! k  b3 c5 @
);( F# o5 }8 N+ }# [
1 x# s5 N5 H2 h
var Registry = xdc.useModule('xdc.runtime.Registry');% l, _; t. W; ?) ?; X5 e
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;2 ^- v1 R" e# b9 c8 n" A- K
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;4 c+ F5 B" l, Q5 Y0 Q
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
  \* d3 ~+ m* P0 bRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;  O0 `1 ^' d( p/ p( Y  ?, B. f
- a4 M+ X, c* ]' d  S
/* create a logger instance */" [0 x. t* ^; L  Z8 u8 o1 h
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
; u; S% ~/ r% \. _7 H2 s* Hvar loggerBufP = new LoggerBuf.Params();% _& V3 b; p4 s5 F$ d, c
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */' ~% I( A' Y& [6 C
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
+ z! ?; ~+ A3 T2 s  u. Y
/ p2 }/ q3 [9 Q/ D" |var appLogger = LoggerBuf.create(loggerBufP);  `) Y: E9 U  M
appLogger.instance.name = "AppLog_Core1";
  Y9 N7 k6 C8 ~% _+ u9 h! O2 }Defaults.common$.logger = appLogger;
. n5 T4 c  [$ |Memory.defaultHeapSize = 0x8192;    6 g& e) B& [4 i0 v0 x1 i" O3 E  B
Idle.idleFxns[0] = "&LEDStatus";
& X, d( e; s6 F/ ACache.initSize.l2Size = Cache.L2Size_32K;
3 a& E) i) E8 p/ S9 D0 Z+ ^% B3 v- i& G; C
回复 支持 反对

使用道具 举报

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 */4 {) J* a* ?& Q- A( d
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');% h8 b5 I$ j( f( a8 n
var heapMemParams = new HeapMem.Params();
5 Z- L. s* c8 cheapMemParams.size = 0x4000;" r) f7 f! F4 M# S
" Y# ~- f' `. @5 K8 V
var Memory = xdc.useModule('xdc.runtime.Memory');
' c9 X% d2 i1 f" |7 uMemory.defaultHeapInstance = HeapMem.create(heapMemParams);. L  b# O- s; }1 y) \

7 M' ]% f- ?, V& ^( F. `我大约calloc  每次共计大小为5K*16bits,
9 q; O. H+ `) l4 u+ I; J. P. G$ G而默认配置才0x4000、需要改大。
1 r9 b7 e7 s! f, [3 Z
$ }5 e# J% T- a% M2 Z
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
! R+ y7 Y" w2 [! j1 q/ U4 vProgram.heap = 0;
1 ]( q9 {7 h% P' cProgram.argSize = 100;  /* minimum size */
* o" M. s: B  y" x$ G. e5 w" l: {, ^; p+ o0 ^Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-31 01:03 , Processed in 0.042167 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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