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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

: ^  C2 k. l) ]$ a- m- x$ h    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256' a3 `8 {; Y' E- k
- ~3 H, |! p/ G7 r
其他程序段。。。。。& z0 p7 v: J& p& C

) `& w8 m, g  C# O. a4 l! b  U8 x   free(x_d);* v3 q' L8 V0 k* \$ o. s: j
: Y8 T: o8 }3 s3 R" F8 [
使用DSP侧单独调试功能,验证动态申请没有问题,
! f6 e- \9 D  E0 B' h
$ o& `( Y. N$ A8 H但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。. o4 q% g0 A: \# L7 U- A
- h' S# m( @  t! q! Y  u+ W1 o6 Y
6 e3 v! @  Z/ V" a7 ]
6 A  v+ a" U) o& S& R6 X' \

3 q0 x& {* [! W  M
) z* C8 i8 {7 ^7 t0 k, ^  r( u& i5 V/ O8 X) G

' b& c4 O0 B( R6 \
* R; J# {; y% i- ]/ t
" T+ k+ J; S; J: q! h
  [# `! U( I& Z/ A  O
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
+ `) o. v2 c( l6 {) L; w我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下( L2 Y$ F  q9 C) H; c6 y' e. a
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)# E$ h: ^" R+ F+ `3 r; \, g
2 \- {6 O$ V: T$ n: u0 R1 L
是不是需要在DSP.CFG中进行配置
( a: N1 p$ A/ |4 J我现在的配置为% ?" U; Q3 x6 T5 Q" N

/ k+ T6 ]; Y3 Y' Y. T/*
  g: w" F1 H7 _( p, E *  ======== Operating System Configuration ========
1 q4 |1 v4 t1 X/ p' }& S */& U" J3 E* p. u1 \' K$ t
2 g$ Z6 R* l  {
/* no rts heap */
% r6 a. e: b- f# yProgram.heap = 0;  y0 Q; D; E8 _6 E
Program.argSize = 100;  /* minimum size */- t9 v4 w- s4 y% k% O% K
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大& A0 ]6 f/ ^+ F9 ]
! Z  b) g! D/ x% C: Y/ e6 v% f% {
/* create a default heap */( t6 d: i2 V/ K
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');! {/ g" t/ ]' Y9 A8 k
var heapMemParams = new HeapMem.Params();
. {: ^5 O; T; k1 V& `) n+ VheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大' ^3 b- o" [/ o
+ Z, [: e/ P# J
var Memory = xdc.useModule('xdc.runtime.Memory');! I% M5 S6 D/ ^; f
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
& x" T1 O7 i% h, l% e
- |/ ~9 G8 K$ Y6 C/* configure System module */7 t" {+ N& C1 J
var SysMin = xdc.useModule('xdc.runtime.SysMin');
9 N' e/ U& Y! U3 Y! vSysMin.bufSize = 0x1000;
" Z" x* Q0 r; i; p) O8 U! q* GSysMin.flushAtExit = false;# b8 v1 l0 |6 X) j+ G
! s$ j- K8 @0 x
var System = xdc.useModule('xdc.runtime.System');4 o5 p! A3 v' S7 [) Q
System.SupportProxy = SysMin;
- j: w: B) [7 p8 b! b3 X8 T: H' y+ v# G
/* configure SysBios to use the lower half of Timer 1 */
1 V& c/ Y. ?+ L2 g- H9 x$ ^1 t3 l( q/ qvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
) l: P- V% l, a, Q7 Z3 x! P0 s5 S$ [var Clock = xdc.useModule('ti.sysbios.knl.Clock');
# r- q, m; X- Y+ _) A6 n0 S! C" UTimer.timerSettings[1].master = true;- t1 n6 l7 N- I) o0 o  l
Timer.defaultHalf = Timer.Half_LOWER;
6 |% A7 Z1 U6 Q' ~Clock.timerId = 1;1 i  l+ d# ~" |" R$ `
* m% p. i0 `+ E; ^

1 r  n2 t1 W7 v! T8 @) x/*
6 l5 P' |# ?9 D *  ======== Miscellaneous Configuration ========
* ^( K, D! Z+ U; r3 c: T) k7 f */9 p, r+ @# A0 |. U  g
! l0 q6 u$ o7 Q+ h0 |3 }
/* set default diags mask */
5 m! U6 u. u+ N9 `var Diags = xdc.useModule('xdc.runtime.Diags');
$ W2 c+ |  G( ]) Wvar Defaults = xdc.useModule('xdc.runtime.Defaults');
3 p9 p1 Z* A) r; t) k" V1 N, ?2 T
  u  {0 B/ s1 Z& Z. p& }/ e9 CDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;: Q( C7 U. O0 x; ]  _6 W
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
, Y3 O( B( O) X' `+ I% [0 uDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;/ w. R1 A" d; t6 j9 ]6 p) D5 O
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
* B; `" H5 |3 B9 c5 j; [' Y, dDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
) ]( `7 B- K4 O5 y1 FDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
9 X/ R% W; F. [8 S+ t8 Z: B3 [Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;: W$ }0 @: H1 V
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
, t# Q5 V' X% I, [' Y, uDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
5 k2 g. ~1 U' z% o- L& V0 G2 PDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;, g  X* ]- c0 x9 O6 k( Y
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
" I0 d* ]+ H4 P5 n- kDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
( `+ ]# `  V0 _* PDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;& M* c7 `  l1 s1 {
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
" G( ~- x5 a3 S/ F
: q3 D% @+ ~' W, q% v2 S0 s8 w; g/* override diags mask for selected modules */. z5 ~; ^8 ~! J4 w
xdc.useModule('xdc.runtime.Main');
6 z3 R! K* k# w" S, X, q$ zDiags.setMaskMeta(% [1 n9 a% f6 J2 f8 j1 T
    "xdc.runtime.Main",- T. y. c4 B. C
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
/ p* {9 U2 t( _2 U. ^) n, r    Diags.RUNTIME_ON# u5 A1 d8 O: K  B% P
);, I* }2 S4 u9 L& v# L0 `/ H" {) K

- ~. `! J4 K, m3 Bvar Registry = xdc.useModule('xdc.runtime.Registry');
# i) y9 o/ I& B1 f. Y! H; h, [Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
; [" _' U  G% WRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;+ V9 E( {; A$ M, X) Y4 T
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
& ^1 h) `* v  {' fRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
; ^9 @" g1 m1 }$ S! Y7 `# U: r+ l9 v0 F! a8 ~  }
/* create a logger instance */* ]+ n' {& N' x7 [! M& h# S7 N
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');* O7 V; Q; T5 d9 B0 O% P
var loggerBufP = new LoggerBuf.Params();
  R  N' n1 g% r# ]loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */! A  f4 I1 S1 E
loggerBufP.bufType = LoggerBuf.BufType_FIXED;/ O% y$ O) N: I$ c

: I9 T& S" K5 Yvar appLogger = LoggerBuf.create(loggerBufP);
6 m7 j) a* J2 p8 k. ], \' E5 P6 gappLogger.instance.name = "AppLog_Core1";
5 P: q, Z2 R4 R5 M* MDefaults.common$.logger = appLogger;
" [- Y+ S- s2 v9 m" R3 Q, Z( A( OMemory.defaultHeapSize = 0x8192;    7 X4 B# w! j" h) w" e; b9 x
Idle.idleFxns[0] = "&LEDStatus";
/ J" P& z* H5 b' w9 ~Cache.initSize.l2Size = Cache.L2Size_32K;
1 P5 k/ D1 R! g. J3 i( t: [7 x3 i4 Q& B0 [0 Z  c( i
回复 支持 反对

使用道具 举报

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 */3 B. G; y1 d" H: P  N
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');0 J9 K% V* N! ~) W6 S
var heapMemParams = new HeapMem.Params();2 {% ^5 F) B; s( u, b; Y0 p
heapMemParams.size = 0x4000;
4 M0 S  y4 j) c; X( i
1 ]4 |" d7 B& \! s1 ]( }* T9 r  lvar Memory = xdc.useModule('xdc.runtime.Memory');; u7 t  R! i" `$ o3 p1 ]% ]0 J# B$ w
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
0 z0 E8 L+ A% t& ?
. W6 J9 e& k* _  I5 n" ~& @" Y我大约calloc  每次共计大小为5K*16bits,
$ `+ S7 f0 D+ ~' m" c' x而默认配置才0x4000、需要改大。
/ V4 l/ y: M# r" {  o" I' R4 y' K
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
! J+ N" q3 ~5 s7 F, B8 g( GProgram.heap = 0;$ Y) G, a/ a8 [1 `
Program.argSize = 100;  /* minimum size */
4 r5 d, x; a* W- d3 QProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-10 02:26 , Processed in 0.065422 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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