关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
) ]3 D$ _  \# J/ S2 l( x& T0 z% L- o0 @7 l" c4 N* l' {6 Q4 K9 c3 O
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
: G" _& \/ B" ]0 i9 |& E& C
. Y0 _3 e9 t8 K6 @& d. z" ^! h1 Q- {7 M其他程序段。。。。。
! J& r0 b3 U9 v! P8 a( M ! T( ~0 _9 {+ p# S( i  I
   free(x_d);
3 n# f' v* n' Q
7 T0 G& k6 d  n4 s# Y$ {) e0 n使用DSP侧单独调试功能,验证动态申请没有问题,
" l) q4 }' g; N9 P& t$ q
" m# H" Z, f, A9 g; P: r但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
2 h4 g4 ^0 \% p3 h2 G; ~

2 u7 A5 h8 i) M
- X7 N& g5 P: M" q0 R6 |& Q' P
6 I2 c  ~6 {1 j, ?! h' e( g4 O5 T& N7 F/ K% r  }
  n/ I# j* g7 Z2 o
0 q) }5 c* u: |( v

& k& C! ~2 L2 x. u% A# J- q8 I, G) g% ]4 S$ s6 e$ f  R: n6 `
5 K) r( ~) b) t, S4 w

- x+ T- s% w$ B" ?, ]4 d, u
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明6 x  R% b' S0 c) N& Y- ~
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下( m' }& k& v. j1 e! p/ U
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
6 `# v9 J1 i1 k) j, D+ V  b3 u

  d3 A. R( x$ C/ s3 }* e/ E是不是需要在DSP.CFG中进行配置: x' h. |! T1 v- t* |
我现在的配置为. C" P" a1 v7 O' B' p
5 R' p; b2 \' z5 B$ b8 N
/*% V  \" l2 S" u
*  ======== Operating System Configuration ========/ ~! q- l2 _* f
*/  m( n; |$ G& ]# f/ J# L. S

7 M$ R: u1 C. O( J5 F2 F4 U/* no rts heap */
' _) e  a. n2 o4 v+ I; CProgram.heap = 0;- M! V* ]1 c; y' i6 h- n
Program.argSize = 100;  /* minimum size */
. b2 w# @3 j) P- T+ {" fProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大( V1 H) B+ ~" U) F2 L( }% y+ i

6 H2 C! `+ S- y, h0 g" o+ T0 T/* create a default heap */
( |8 h7 g6 h4 Mvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
* R& v4 R8 I* z. S; ?/ E5 ~var heapMemParams = new HeapMem.Params();; e- D) L9 U& j2 u1 k5 Z5 ~8 z
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大: ?% |  y: e1 t; \. G5 g7 J
) n% _0 b3 |/ S- D
var Memory = xdc.useModule('xdc.runtime.Memory');
0 H$ c) Y8 K8 y$ gMemory.defaultHeapInstance = HeapMem.create(heapMemParams);: `* K$ L2 X# Z

* ]  ^  S7 P4 I' s* \/* configure System module *// x- ?# X) ~6 y! t( t3 d5 u" L
var SysMin = xdc.useModule('xdc.runtime.SysMin');
8 l! m0 L8 v; _! Q6 x8 i( W0 qSysMin.bufSize = 0x1000;4 c- q% {% {8 V7 B* b
SysMin.flushAtExit = false;1 b; i( W* a9 N8 @
/ o; f* ~; l% Z- M
var System = xdc.useModule('xdc.runtime.System');4 T+ x  C$ q; ~3 k
System.SupportProxy = SysMin;
( h% W2 Y/ G, a6 |7 Q- r: `2 G1 ~& G1 l2 R
/* configure SysBios to use the lower half of Timer 1 */
( X, a  E8 c) B( Y( evar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');& b7 G6 a3 a$ z- S/ l
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
. Y$ f3 p' ^+ W6 h- J0 u, m1 LTimer.timerSettings[1].master = true;
9 c+ ?+ O3 ~+ A5 i( lTimer.defaultHalf = Timer.Half_LOWER;
" j3 _2 j: H" h8 @: e3 I6 DClock.timerId = 1;
. ]9 P# n7 |) v! v6 z8 \1 m* c& N: m6 `9 l
' P0 p4 Y! q* F
/*$ K5 F- B0 D3 ]6 E4 I+ A% s
*  ======== Miscellaneous Configuration ========
: |9 w% ^2 r3 j0 P% l- ^- q */
" s0 h5 J# k' t1 M9 Q  W
. w$ {8 M; q7 S/* set default diags mask */# ~: W1 H+ W+ l
var Diags = xdc.useModule('xdc.runtime.Diags');" p- o: \( F: K) P3 e" p* R
var Defaults = xdc.useModule('xdc.runtime.Defaults');
; \8 g& h# n& y6 N9 Z
; G5 m" I) q! D3 V- f0 q, jDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
  R6 Z! N) _- e9 WDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;. z$ p3 c5 S$ w, J- U4 Q
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;* L$ s# D+ l. x0 q+ Y9 v
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */& y& A/ }+ c$ p1 l# k+ x7 \4 W0 L
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */! i/ [7 T* X$ E# g' J
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
3 h( u! t4 \% F- `/ W2 \1 s1 eDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;* t/ R/ G4 W! P; J8 J! P2 q, |& P
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
6 U) s  R/ N2 Y1 {$ }/ Y* S) BDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
2 n  T$ m( u* j* b! y/ J: mDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
$ [! w6 `: H2 [3 s9 TDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
- F# X  Q, L% C3 qDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;1 O# H( z' j7 E0 G0 N
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;( |0 O; I, m1 J5 C- {6 F
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
6 v" {8 V7 r2 y$ l8 S. [: ]6 S% K% l  W+ T7 ?0 O
/* override diags mask for selected modules */4 t! P5 O( @# X; B8 z$ Q% H8 v/ n6 Y: X2 F% A
xdc.useModule('xdc.runtime.Main');
( V! r9 ~8 Z( ~# {2 uDiags.setMaskMeta(
7 U0 Q$ M/ h6 q) m    "xdc.runtime.Main",
$ Z  Q+ u% n% p3 t    Diags.ENTRY | Diags.EXIT | Diags.INFO,4 }  Z$ O* d0 D; H, Q) ~# b
    Diags.RUNTIME_ON
3 U) J. `' \; @% f& N);
& l. n( b2 A" x8 w  L# i5 L$ {) D0 O
var Registry = xdc.useModule('xdc.runtime.Registry');
) N' o3 E, u% O! n5 Q9 {, f% A. }Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;4 W6 x4 L9 j; X
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;; d, K( @( p$ {- ]1 ?* k
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
! z, g6 W* f& b( [$ L" k, `Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;% F5 {! X/ l2 D, W" }, U( d0 }1 I

' X- C6 U! t5 O/ z( t% b  F. J/* create a logger instance */
: g& I1 i$ M/ I( rvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');' ~; @2 q9 A, x* k5 a% k4 c
var loggerBufP = new LoggerBuf.Params();
" K) V- e6 E9 i7 B9 }loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
/ @' J5 q" e4 P+ a9 R; ]# v2 wloggerBufP.bufType = LoggerBuf.BufType_FIXED;
! \9 `9 t' [! ^' B$ F, h+ \
4 Z; g$ {; z; f5 yvar appLogger = LoggerBuf.create(loggerBufP);7 U$ h8 K5 N. }3 X7 W8 T+ Q
appLogger.instance.name = "AppLog_Core1";
0 t$ y' R- q8 @; s7 ]% O  \Defaults.common$.logger = appLogger;
# L$ @% T/ Y1 N, C* uMemory.defaultHeapSize = 0x8192;    % T6 B0 S0 N( M9 P
Idle.idleFxns[0] = "&LEDStatus";
9 N. P3 u, D3 @. I& Y0 J* B) @/ C! tCache.initSize.l2Size = Cache.L2Size_32K;( U+ Z4 s- L; A( a# y
1 q% S; S6 c9 A! ^
回复 支持 反对

使用道具 举报

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 */
7 U9 I: C$ x: e5 g; Vvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
) z# X7 S; ?& F8 Vvar heapMemParams = new HeapMem.Params();
& p: i# c  }* h3 p" BheapMemParams.size = 0x4000;7 z; T3 e( }/ n5 ~" ^1 k
. J1 |4 A& y& ^5 k: W' y- w* M
var Memory = xdc.useModule('xdc.runtime.Memory');5 f# M" G6 _9 z3 o! C
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
8 s8 W  D4 C. f* \. A+ E. ^5 c: E2 T; H% E$ M+ Z9 O
我大约calloc  每次共计大小为5K*16bits,
/ d: I& H  m0 I$ g! U6 U1 l, g! w而默认配置才0x4000、需要改大。
, d2 ?% C3 Z/ z8 v/ @. l
% M4 \; M! [! E6 M4 _. W6 d& e5 q
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
3 o; D! L* m; R3 m/ N! TProgram.heap = 0;
" I% x+ `  e: i8 n; C- W; vProgram.argSize = 100;  /* minimum size */
% O$ F7 J5 O3 X) hProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-28 15:00 , Processed in 0.041990 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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