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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构* ]( ~6 J; @# C. d, e+ g
2 C8 P1 K( K  }" N. ^3 K4 P
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
3 o1 V" E5 S/ _. \. @; B  u" j
" x$ V+ E- ]/ U, S8 x* w! E2 F其他程序段。。。。。: m. r& \7 P8 Q+ a  I* P
! H; F+ I( C4 S# N( N0 p+ T6 x
   free(x_d);9 \! [& V  b) b% \* C. J+ `; B
* r; d& w6 K% F. v. M/ x* Y
使用DSP侧单独调试功能,验证动态申请没有问题,4 E6 R( K5 N% L( y$ a  Z

! s% N! S0 `4 p9 E! D+ y: i但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。- v9 t$ d; A; s6 r3 A
) C4 M0 w/ P% p$ f7 B! k. ?

2 o& m/ P2 @- z. H7 N4 U* c% z2 K' g2 W5 N5 Y+ t: X! _, e* m; |

7 ?9 p( u7 J3 ^- u9 C) x1 }$ \
4 y; o7 e4 s+ c' o/ X" [+ L; b% T/ O& ^' R

8 a1 \) N) n9 J' ]& y# B6 T5 {) S# \1 ]5 ?! R
) c. w, `0 c% Z

$ f3 ]+ d) O* p+ X; H. g; m4 G
分享到:  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 */
  z% P& A  H8 e8 q1 aProgram.heap = 0;4 h! e! H" }3 B% S; g$ j; e. x$ F
Program.argSize = 100;  /* minimum size */# f& }6 X, }, \( `4 v
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
# A, Z4 J. y" h7 b0 cvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');- `5 t3 d6 q' A. _0 K( k$ A
var heapMemParams = new HeapMem.Params();- g( {" T/ U% g* f
heapMemParams.size = 0x4000;# P: Y% Y2 ~5 F; E

% \" J' t2 l6 G; Uvar Memory = xdc.useModule('xdc.runtime.Memory');+ |9 u# J# ]6 O! x
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
! q. R. Q3 ]! o" C. X( q8 m* p! `. J4 D! a
我大约calloc  每次共计大小为5K*16bits,  ^8 Y& f5 Q$ j' D6 I
而默认配置才0x4000、需要改大。
$ s$ L4 |% `1 [5 S5 ^( Q- X& D( S* b4 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' E( z6 j. N( I3 b
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下5 g) N2 E/ ?5 f7 A- z
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)6 y2 u/ v: N+ x7 ?6 W  U
( E' P! i. v2 u, l4 X
是不是需要在DSP.CFG中进行配置
  X. F, i/ o( M) \7 l我现在的配置为
6 G' k# k; B" D0 U( l& C, e' p) d. D& G  N9 F0 U+ N
/*0 h5 u$ _1 S8 q; n3 B1 R
*  ======== Operating System Configuration ========! z* S* c4 j9 d& A
*/
4 K9 k7 B$ w5 _2 I. J
9 N- ?6 d7 W5 G, ]; n+ Q7 x/* no rts heap */
7 G3 h* ^, D3 Z. A* g0 a! jProgram.heap = 0;0 X4 P3 ]$ o( k7 ^; i( o: k5 i
Program.argSize = 100;  /* minimum size */
1 Y6 s7 U: O+ i% N/ MProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
- F3 Q* `: X; I: q% {6 y3 Z  E( x; G; W) a+ u: z
/* create a default heap */1 L4 b: `5 b  O+ ?0 s* k
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
1 }- ?9 n6 k/ L. ^0 \1 h2 n+ dvar heapMemParams = new HeapMem.Params();' ?" w6 H$ R2 K
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
2 B$ L. \: n! j) z+ F  c' D% n+ U: w" e- X8 g
var Memory = xdc.useModule('xdc.runtime.Memory');4 }5 w, O& B6 f4 I
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);) t7 |. g! x4 y5 M' b
6 N0 B/ q7 r. W7 U
/* configure System module */* U6 t$ q% p2 X. b+ K6 _" k
var SysMin = xdc.useModule('xdc.runtime.SysMin');
. [$ t, H8 ]7 E7 JSysMin.bufSize = 0x1000;4 y) a6 {( A- A: r% D
SysMin.flushAtExit = false;
, |6 w) e% x0 y% K+ T9 ^
; p. I7 l5 f+ L: w3 fvar System = xdc.useModule('xdc.runtime.System');* K5 r  V4 G! P% `
System.SupportProxy = SysMin;
4 b" w8 e: @: |' i) V6 ?- W6 ?! X  G# j& [: |% \. z
/* configure SysBios to use the lower half of Timer 1 */2 c! G- y3 L# f4 Y
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
9 K2 t0 [. ]. Dvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
0 v! w6 m3 B7 p2 L$ v0 z8 fTimer.timerSettings[1].master = true;( I0 T. [3 Y7 o5 Q2 P; n7 l
Timer.defaultHalf = Timer.Half_LOWER;2 |$ q: x4 \/ V; \6 g- W* o
Clock.timerId = 1;
. i* ~9 F8 e* f" v/ K- q
  h- q; Z3 e! G5 k, y! _' ~7 C3 V2 c: g( d9 y2 s; Z. t) F) j
/*" G9 e- h9 w" L. x5 R. V$ D
*  ======== Miscellaneous Configuration ========  f4 G) }; q) q1 r3 m1 I. }- c' N/ B
*/) |% ?- V# T7 A" F- `  |5 A7 w
* {! \) P4 ~; l0 G; |- b1 \
/* set default diags mask */, R+ V3 s- P, s' F
var Diags = xdc.useModule('xdc.runtime.Diags');1 \1 F. y6 P- q$ V$ i
var Defaults = xdc.useModule('xdc.runtime.Defaults');
6 M) w$ V( M& I: ^& N
, B9 W/ B: R. R4 ]! dDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
1 u* R- f, A, l5 [8 _Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
" y8 H' h( v9 u  {' p6 z4 N  X6 hDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
1 V6 w2 k1 u& @9 x8 r- ADefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */! u, @( Y' @4 B7 p' {
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
3 L+ L4 }% o# r2 {, mDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
5 [( U- k, w. y. D) ZDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;: c+ [1 Q: N* G7 A& |7 k
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;# C" @6 f1 X) t+ e0 m" Y0 ?. X7 N
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;/ q% W, |7 d# v" _: \
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;( q  S: @2 H7 y
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;0 m) `3 V- @9 D7 d+ E9 ~/ {% m9 X! f
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;  g6 [/ w; E: `% ]( A
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;! ?- [' R& o" X. T& ~+ G9 d9 t
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;/ y/ ?5 J# Z) d# c# u/ c( U; A

- j. M' k6 g' x/ A! `8 B: G/* override diags mask for selected modules */" s" u, L9 _4 a* c* a) R
xdc.useModule('xdc.runtime.Main');+ `* \7 w5 y$ O0 W# q: T1 O
Diags.setMaskMeta(
: ?% D( t  l/ c" E    "xdc.runtime.Main",
  }& T- F! I% |4 ]* O: m    Diags.ENTRY | Diags.EXIT | Diags.INFO,4 K* g" m* G& w' [
    Diags.RUNTIME_ON$ j1 R) ~7 O% M5 g% ]2 ]  T# _* t
);* t5 c0 ]4 Q4 G( T! n7 h5 z0 M$ W

( X( o4 _0 q& Xvar Registry = xdc.useModule('xdc.runtime.Registry');  e5 K- Y% F5 O+ \6 n
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
/ F1 {0 t- O% ORegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
- O7 X3 }+ O/ y5 Z. k' JRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;! n% I2 g  ?1 @& x+ L
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;& [1 v9 K; y( ?, S) k3 S

+ L) H& [* z% l( n( N/* create a logger instance */% M. P0 a* p! L  L8 c. S
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
( m7 T: `6 ~& j( F& r+ f6 s' M; tvar loggerBufP = new LoggerBuf.Params();
' a' s/ v! B8 g( P+ b- jloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */& S! D5 }+ v/ j; T& [; P
loggerBufP.bufType = LoggerBuf.BufType_FIXED;( d& T, |$ Q  J6 Q0 i) e1 m4 N

* n. ^& e$ i9 j( mvar appLogger = LoggerBuf.create(loggerBufP);
* F6 ?( _- K" tappLogger.instance.name = "AppLog_Core1";
" x0 }( U7 z3 [" J$ B+ @; {Defaults.common$.logger = appLogger;6 |& \+ U/ N: L+ N$ G
Memory.defaultHeapSize = 0x8192;   
/ o' y! s3 L- y2 E- E0 l, g, AIdle.idleFxns[0] = "&LEDStatus";
( F/ ~( P$ N/ @! Q5 L! eCache.initSize.l2Size = Cache.L2Size_32K;
+ {. M3 x$ M8 J: Z
* e) v" I+ S5 t/ i$ b0 w% L
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-19 03:13 , Processed in 0.043075 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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