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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构+ ]+ z3 V' M' u* V5 `

, X3 d. n8 B, ^    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
1 W& f) Z# N; Q, m1 x* Y
; i: [5 h& k7 u1 T2 K其他程序段。。。。。
( @* _( r/ k2 w" T; @7 a9 A  `$ C9 F ! S- z& l. [  u  |& f' T4 Q1 E4 v+ g
   free(x_d);9 f: e3 }; _; T7 }& x; C3 K) j
& |; Q1 s8 q& T: [$ I; F
使用DSP侧单独调试功能,验证动态申请没有问题,: D# L3 `, ~# i
' q  W* t6 h2 E0 D; G- r
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
6 U) ~9 b# T# r# v# A. C4 I0 {: a& k
; o; p& i; F$ C! ?5 @
% F* A$ o2 ^1 y, \1 A: U! ^
" Q1 \: ?* _- T" h* ?! t$ l
# S( H- r% H+ K; v) {: G8 Y2 K/ L

2 e, C4 L: I  F  [& @
  b+ B% `% _$ \! k7 B0 l0 _) k; E, ]7 C9 N1 S

+ a* A/ n- L( X1 ^
* W; s% @7 U& d7 n) u& i1 K% I3 n* |: O0 l& `" {
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
4 e2 v$ [, w8 s  kProgram.heap = 0;
$ J( G: O( X! n4 ^: t- KProgram.argSize = 100;  /* minimum size */( j$ F, F$ q+ e  f
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */* q8 R' j: i5 n4 P4 M; L
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');/ r9 l. U) X% H& o
var heapMemParams = new HeapMem.Params();
7 H9 M" e4 u1 q5 k! |  d( v- \heapMemParams.size = 0x4000;
% ?( I3 j' q9 ~& m1 _' D9 N, y. F
+ x+ v2 ?! |* \# a, N: W2 L( ~7 u/ wvar Memory = xdc.useModule('xdc.runtime.Memory');
- U8 r8 X0 N; S2 b2 h4 `Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
8 i5 E( r! y1 o1 X
! A. H. Y# X7 N- D我大约calloc  每次共计大小为5K*16bits,; u( @+ D9 C5 \  t0 |
而默认配置才0x4000、需要改大。
9 s8 m1 p8 f' L$ g' n& x) p3 x7 f3 s9 a- C7 i. z
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
% k, R2 a8 ?8 e5 l我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
3 k! x% N, [6 B$ e- ?(不过疑惑的是,为何单独DSP仿真就没有问题呢?)3 V  s2 R5 E- d/ `3 s5 H; d1 N
6 {3 p& f; `* x7 E$ c8 Q
是不是需要在DSP.CFG中进行配置
* C$ b% g2 |$ _- h; n- c我现在的配置为, E9 c6 w0 g' H4 C" i/ Z2 d4 b4 a
; \/ u( k9 j) u# }  {
/*
- N+ v: ?; u7 {- S *  ======== Operating System Configuration ========
' ^+ R0 Y3 s. r4 Q; z  Q' M */
4 o& [6 d# C- Z
+ p- Q' u6 R1 O8 ]9 {, y9 w: _  x/* no rts heap */( `/ P) z! l1 z0 g% x2 r, N! E
Program.heap = 0;
4 ?0 O" c% o! V/ hProgram.argSize = 100;  /* minimum size */* w/ r/ Y. K: c0 [2 V: a( e
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
* A" t/ b6 O  i( S0 C1 z( \1 S/ @* X1 \3 a
/* create a default heap */$ D5 e- q5 p+ }: X5 ?( N
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
( ^( U' K" @+ T+ Qvar heapMemParams = new HeapMem.Params();
- b9 b9 ^) w! z* H/ LheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大4 T* B4 i* M; \& Z3 f* j
( ~8 A  _9 F: S: e: t/ {- I7 o# p
var Memory = xdc.useModule('xdc.runtime.Memory');* I% m  j" h. i! Q$ F/ Y& y
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
  t. G! s) S' Q5 e& _4 p, A$ P) n/ ]' T* c3 K6 k9 a
/* configure System module */; u  N' R4 X% o% I: G, o( s8 k& ]
var SysMin = xdc.useModule('xdc.runtime.SysMin');+ P0 c6 u/ Y; g6 C# V
SysMin.bufSize = 0x1000;# i7 l1 T: Z! T- J
SysMin.flushAtExit = false;
1 ?, I0 [; z* |. P  A/ M& G8 |0 F, x) F
var System = xdc.useModule('xdc.runtime.System');
% d$ ]! o; q4 [! i* {7 FSystem.SupportProxy = SysMin;' ~0 O+ U( t0 W
4 P6 U9 A8 L4 [8 p3 A$ M) G2 m  O
/* configure SysBios to use the lower half of Timer 1 */
+ A; F. K% R9 rvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');( }+ I, c4 G# p* @" N  d% H" N* [
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
: Z3 }5 i; }- Y+ ]) c9 k( cTimer.timerSettings[1].master = true;
/ k8 z+ a' d; n% N2 ]) pTimer.defaultHalf = Timer.Half_LOWER;: s7 \9 O4 s" `! E5 B# w; b% C
Clock.timerId = 1;/ I7 F2 j, F& C1 d; Q

4 d  i0 f7 Q: w) \. H' \5 Y' @1 V$ z5 P3 @1 D
/*
. ?5 Z2 X8 n( C+ h  P" g *  ======== Miscellaneous Configuration ========8 F" ], T# x6 B3 }2 N0 N
*/
! O7 s4 m8 U) _4 x' z
& M, x! W" |; k/* set default diags mask */
+ f0 u- J3 k# d2 o; [" M/ xvar Diags = xdc.useModule('xdc.runtime.Diags');
; d) L/ j+ o6 n. g& Z( w* }var Defaults = xdc.useModule('xdc.runtime.Defaults');: D5 P0 T& _( e& u3 k# K$ z
. r$ Z+ E8 C; |% |. l7 t
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;9 r* j9 \5 e& @6 a& U
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
, l, x, r1 |8 G7 k  SDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
! E. }: d$ i1 b# n4 pDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */: h9 L4 @+ K9 T" \' x
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
% Q1 @" W3 O( n3 }8 v- UDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;2 H# F. T# e6 B0 S! v1 N/ F5 u
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
2 _4 R( M# z' E% w' wDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;7 c! e1 H( _( c& ?6 s  x
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
" M1 C! Z# c5 Y, E  fDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
) `2 u' @4 \3 c- SDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
( P, p% A: r7 k6 Q4 fDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;/ c2 U+ w8 x" i4 M* Z7 i" t
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
0 H) q. v: i. e4 l9 p9 s' `, D/ nDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
5 U% o. V( o, A# p# g. e- O7 d0 W' d: w/ R# j* F
/* override diags mask for selected modules */
6 e  b: K" x8 Ixdc.useModule('xdc.runtime.Main');. Y0 o' n/ B) z) \
Diags.setMaskMeta(4 {6 r( Z# {! {. b& c
    "xdc.runtime.Main",5 ^# x0 Q5 j/ _$ F' |# N
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
- R+ R8 {6 |1 j& I0 d" r0 x! \    Diags.RUNTIME_ON' g9 C. r5 {7 ~! l9 T
);9 p4 s0 Z2 I' y+ C6 o9 N* P. V

! s+ c8 k! a0 h! Xvar Registry = xdc.useModule('xdc.runtime.Registry');5 i3 u  v* g8 a2 f! T: _' m; ]
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;5 D) x4 b! r% m& ]
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
, M' ~  {4 j1 H( X; N& k$ p! ^/ dRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;/ W/ t* ^; U& L: X! f! ~1 O
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;8 B8 S0 Y0 r9 @( v! g1 Z
# U! v& _( n$ J$ z9 _
/* create a logger instance */$ c! y1 ~: {$ N
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
; x/ j* g, K3 i+ i0 g- Vvar loggerBufP = new LoggerBuf.Params();' i8 j) t' o" T  L
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */% y: q$ N+ F, ~' e) U0 [
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
) x0 @' H; U0 P  D# @. H* N& r. f+ E& f# I( G; Z
var appLogger = LoggerBuf.create(loggerBufP);
2 N6 A  z& L$ x( y6 \1 TappLogger.instance.name = "AppLog_Core1";1 B# T  b% n# e+ P  d7 h$ I
Defaults.common$.logger = appLogger;, ^4 n5 U$ X' Z8 d/ u9 h. y) n
Memory.defaultHeapSize = 0x8192;   
- e9 m7 I% e4 X$ G3 RIdle.idleFxns[0] = "&LEDStatus";' q( X- K8 X4 k: ~0 k& z
Cache.initSize.l2Size = Cache.L2Size_32K;
" q. Q1 J0 ?0 r" W8 Y  W8 Y: g" E! l; M! X  n
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-14 16:20 , Processed in 0.042571 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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