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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构& w2 @6 f! M+ C; R
% R/ Q. j* `' J3 A" m9 J
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256, N+ w9 `; Z9 `+ M; c: m
1 L! R( o: u4 v" S) c1 B7 D
其他程序段。。。。。$ ?' S4 F, a$ S+ X' C

' ^) h4 P& i. S! e2 \" y& N2 V9 u   free(x_d);2 R0 H7 D* V, _3 B% n- s- m
- M) f" e" x$ W7 X
使用DSP侧单独调试功能,验证动态申请没有问题,3 ?6 E. w8 o1 e/ @
9 T! B; A% g4 c; y/ R
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。# O& ]" s  b. s$ v6 v  F
7 B$ R+ q: x* g9 u* Q' a. x( d3 \
6 e/ z6 y* K( v0 k2 y3 ?2 d

0 r: @: T0 r+ c4 i4 t  d% j% c  `# u/ I
% R. q: K8 E* [, v/ a
1 n: k" C* c- W8 R' f5 `  S  A  c! s

1 H9 B& ?) C9 f) j/ }
( [% ^& R) n- m9 d: Q1 h
9 q1 b* |) h3 X3 r2 M: E. P5 H# E8 V
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
- r- Q& m/ X1 N0 G我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
" [% e, G6 N* j* g; V+ R' Y. D(不过疑惑的是,为何单独DSP仿真就没有问题呢?)% t. T+ n( z  I( k
# l# I8 P) s1 K- N$ B
是不是需要在DSP.CFG中进行配置& Y5 G, s+ B# e* Z9 Y8 |- U; d5 |
我现在的配置为: o2 y1 W) Z  [& P, L  b
* I0 A' `. j9 u3 N# y: e
/*) s6 F: U" h& U. p1 p; g+ v
*  ======== Operating System Configuration ========8 s0 @4 \! }/ o+ m0 p* s" D
*/
; Q" o; I2 x) P' g$ w6 X$ v# c2 M
* O# [3 r0 g7 R) g/* no rts heap */
: i% k6 _6 O! q. K! S/ n7 u- UProgram.heap = 0;
1 Q/ N8 D( }+ K7 C8 v3 {) wProgram.argSize = 100;  /* minimum size */
( F  A* W8 \7 U4 W$ aProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大5 o( m6 D2 p9 t$ o0 m! t
0 e9 N0 J2 P9 V1 n8 ^" ~5 q
/* create a default heap *// V, }) v" k! H
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
$ p  U8 {* v: W# P. v9 _. T0 ?( Qvar heapMemParams = new HeapMem.Params();
  ~2 a" i1 T" mheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
2 R8 s$ a  O) b
+ W+ [1 l+ Z2 L5 n1 ~
var Memory = xdc.useModule('xdc.runtime.Memory');/ a  C" R% h6 P6 w' _2 W4 Z
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);1 x4 F& i3 z% Z, Y! N2 c: S0 j
: W8 ^: d; h: k* E9 p; @7 }
/* configure System module */+ e* k3 f! q) z/ L0 V' D" h5 |* a( c
var SysMin = xdc.useModule('xdc.runtime.SysMin');
" ~% m$ V* d+ u0 U/ b! \* `. K& NSysMin.bufSize = 0x1000;# t/ p* x9 E; t0 h/ X
SysMin.flushAtExit = false;- C6 _( z1 a- l

/ R' z- ?* i" L* C8 G" S) Rvar System = xdc.useModule('xdc.runtime.System');
, M6 l4 I; s- ?1 B8 M* \System.SupportProxy = SysMin;) x: r* ]% X; h  h6 @
2 e8 N8 {# Y/ e- N
/* configure SysBios to use the lower half of Timer 1 */9 E7 g. i1 Y( X% Z# C
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
' \' M2 z0 s; G4 qvar Clock = xdc.useModule('ti.sysbios.knl.Clock');4 V" G* C% P+ O+ F" E& r9 Z. {7 [
Timer.timerSettings[1].master = true;. L: J+ e0 u9 g5 |. g; z. w8 W& Q5 `
Timer.defaultHalf = Timer.Half_LOWER;+ k9 h. g+ e# ^7 o9 @) d# B# O) q/ N
Clock.timerId = 1;' T& O0 L% M6 ^6 ~" m) q
6 U& d8 T% x( R" h9 w0 G% c

9 v; E1 j. [. j9 @1 t: r/*
: S/ D! z4 `" g *  ======== Miscellaneous Configuration ========. @9 b1 s, \& v% ]8 a" p2 G; [8 J
*// I) d& _& W# Y* f- E! X

) x: E+ W$ C7 ?- H4 E6 O7 B/* set default diags mask */
+ B: ?6 ]1 {" [6 v/ svar Diags = xdc.useModule('xdc.runtime.Diags');
) l1 C, S2 K9 N# y: j  S( [var Defaults = xdc.useModule('xdc.runtime.Defaults');
. q4 \& S5 S  C
2 y( M! l8 {1 JDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;% Q+ Y" [% o2 E1 [2 L" ^. [
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;; J( Y: V& @+ d+ U1 K4 T' r
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;+ S! g+ I2 O+ s9 l
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */2 u9 ^. G2 q% N$ J$ }
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */# m/ F. N( v. _$ s2 F( B. |
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
" t0 f7 }: Y5 j7 r1 zDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
) D; R1 b' C6 p5 yDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
5 O4 U7 n6 h6 J0 e( k/ gDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;1 k5 g! v. c) ~" U' G
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
4 a7 _0 j. I# L- PDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;" L' o5 Q, E$ I* p2 A
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;7 m0 t4 n3 f: y% t4 F
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;, I* w: I9 U$ l1 m
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;: m* w8 r! I9 L, w

  T* i% B  }# w8 I: C# {' i/* override diags mask for selected modules */
: G8 x  C5 }1 j2 |xdc.useModule('xdc.runtime.Main');
0 C# ]; W' N& \Diags.setMaskMeta(% C- x6 ?) [4 }0 X# |
    "xdc.runtime.Main",+ U# I) n4 ~- ?# M9 P3 S
    Diags.ENTRY | Diags.EXIT | Diags.INFO,! k& S6 M( P& j& j: K% h8 C- v
    Diags.RUNTIME_ON& _1 I2 }% O6 c: a. r
);" o2 o, p* Y6 ~) @) ?7 |: M9 y
0 p! G, B2 {: o- r4 n+ r
var Registry = xdc.useModule('xdc.runtime.Registry');
5 i* ~% H4 [/ G3 L! m- ZRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;4 m1 A/ f& h3 T9 l: Z2 J! @5 H3 r! e
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;/ U6 z) B8 C8 Z% M# X
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;2 A7 o, j% y% x" p& r5 ^8 _
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;& |" K- i; ?) C! Z$ b( z3 I& J

" Z+ C. `- Y( H/* create a logger instance */2 m* c7 Q% w# G: D* h4 B# ^
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
! I: Y, O. L/ Nvar loggerBufP = new LoggerBuf.Params();
% s, q3 l5 P1 n8 r( T; H- }loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
" t! n( n; G) f$ KloggerBufP.bufType = LoggerBuf.BufType_FIXED;' A+ \5 g/ m3 l% w  g7 S% f* C# z
+ }% p5 Y7 F6 t" R; c( ~2 i' |8 A$ Z
var appLogger = LoggerBuf.create(loggerBufP);4 s8 a7 |* x, [
appLogger.instance.name = "AppLog_Core1";, d, G: T) a# j
Defaults.common$.logger = appLogger;% Q6 p, E6 |1 A+ o. s! w# |/ L6 i
Memory.defaultHeapSize = 0x8192;   
+ `5 }4 V) T- o: Q) w" v% [+ ]Idle.idleFxns[0] = "&LEDStatus";
& Z# s# d$ s) n( b# }; gCache.initSize.l2Size = Cache.L2Size_32K;
% z: S; d% Z  r
. H+ P7 X1 y9 e6 j) S) C9 v
回复 支持 反对

使用道具 举报

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 */
: M7 f  E; Z( v! l( a- Uvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
- R- I! H0 F9 C6 V; ^1 G9 kvar heapMemParams = new HeapMem.Params();' ]6 U# X6 @- O6 M9 P" S
heapMemParams.size = 0x4000;( I( _  [9 U2 M  K

/ O; Y, U/ @! |! c7 ivar Memory = xdc.useModule('xdc.runtime.Memory');
8 i# s  V5 _6 y, A( u! ZMemory.defaultHeapInstance = HeapMem.create(heapMemParams);; m/ u- B7 w8 R# C7 E- E9 H

+ z5 [2 e& {6 A1 s& h我大约calloc  每次共计大小为5K*16bits,
* o- F2 y7 A2 u, n  i而默认配置才0x4000、需要改大。
" P; E! G" v9 I
$ y3 R& F$ B# j) i% z* g+ `9 i4 H
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */, R% ?0 s2 `+ b9 l' A% h2 b
Program.heap = 0;% n( p2 {1 y$ V
Program.argSize = 100;  /* minimum size */$ f8 h3 a  J: `
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-1 11:07 , Processed in 0.042908 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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