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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
7 j! r  f! N. L6 u  E. K" B" x, U( v% B, l8 G- n7 B
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256$ s2 j7 b, f4 u# p7 i
9 \* k; u; i4 [  @4 o+ Z5 K
其他程序段。。。。。* `3 [! H9 |" S

4 w. G& P) }( y8 S, s% J   free(x_d);
) c5 K, V2 q3 A/ @7 U5 w
1 s7 b0 d4 v- s使用DSP侧单独调试功能,验证动态申请没有问题,5 {/ A: a* e# \3 {/ N/ N
2 `6 p0 X( e. @4 n0 h
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
  i+ `1 p( @% j
4 g4 l4 x+ r- \" s

# ]4 L6 l: a2 i3 b/ T) v& S2 c0 q1 l
4 |% w" r- |- ~! g0 p7 U7 g" _
  b6 B- P& F7 F/ u! v8 B

" q* @) g; Q6 S/ F2 B; P" @9 N5 }5 y3 L. T5 o  ?' C  O

$ y4 j2 H* g+ g' l# u" e5 T
; a4 E9 Q# |" p3 H' L+ O3 m# N; M! M# m: h2 O9 E
分享到:  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 */, {/ ^. t3 U7 ], p9 {
Program.heap = 0;4 X0 X; ^" j+ c' S! E
Program.argSize = 100;  /* minimum size */' s2 x) p4 U; V' Z5 D2 }# W5 P; ^
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */, s! i& @( ]* m, h8 t; `3 S
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');( T2 n8 C8 ^1 K1 l1 r+ h
var heapMemParams = new HeapMem.Params();; n- Y8 j, {9 I9 a/ I0 J
heapMemParams.size = 0x4000;3 o# x# ^' q& Y# |! J
8 n# M( g6 g' i7 v0 K  O
var Memory = xdc.useModule('xdc.runtime.Memory');. _/ k4 m0 w/ Q8 l8 `9 C- D0 Z
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
4 R$ A: a4 O" F
+ {. @5 R6 @" R, i$ Z7 @我大约calloc  每次共计大小为5K*16bits,
4 ?; y1 @; t* N& D, l  P而默认配置才0x4000、需要改大。& w4 F! I# ^# Y1 O" L- g) z* T

* ^; |* I: a5 [: b) j0 h! c
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明
2 U( ~6 B; y: I$ T+ E, S! |: ?+ x) Y我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下2 {9 q' s# D3 c7 \
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
" `+ R) D. k9 s) K' ?) _1 B

) H3 \5 Y+ a1 [( J+ o是不是需要在DSP.CFG中进行配置7 o3 W' q2 J7 c) t1 v& Q( h
我现在的配置为( [/ ~4 {2 j& w" _
5 k  c$ `' T) K& l  N3 a) V5 K% ]
/*
1 f  v- o5 `" E7 f- O9 k: y- L *  ======== Operating System Configuration ========4 _6 ^0 L3 M9 w6 d
*/3 Q' [+ \- F# o6 \& k; j
1 B$ g1 B9 N. b0 x/ l0 w
/* no rts heap */( X, a. x, e5 N: U  I: E/ Q
Program.heap = 0;
& K7 [' R! u4 f' b7 O/ U! ~Program.argSize = 100;  /* minimum size */
/ _, o) N% t0 d; o! y' |Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
3 \! C; u- |5 g9 j9 ~& @# |0 X
* e: k8 }5 g0 z/ \! h2 r/* create a default heap */" P% R" A) Q* m/ Y
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');% q$ o' w! G9 u3 X( [$ r
var heapMemParams = new HeapMem.Params();
! ?8 T  |# Q& uheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大( ?) w) _3 C; X
/ R9 e/ ^1 q5 c( x9 J
var Memory = xdc.useModule('xdc.runtime.Memory');  d( _8 {. F/ p& J
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
+ R2 g# q3 {+ G1 s" ~1 g' C' P' d& }! r, Y5 J* C+ @, u' C' [, @5 F( e4 W
/* configure System module *// S8 y1 J: Z3 w
var SysMin = xdc.useModule('xdc.runtime.SysMin');
( o. f0 M$ y3 _' S$ m! D% b5 xSysMin.bufSize = 0x1000;
' C$ r+ t& h- |0 ], DSysMin.flushAtExit = false;& `% A5 O( s7 E8 W, _& p9 E6 d

( @! T( F0 r4 S- n* n+ m0 svar System = xdc.useModule('xdc.runtime.System');3 R; L$ M: @, ~
System.SupportProxy = SysMin;! n2 {+ J. X1 ]/ G; J+ b5 N

. @; ]! J2 \' Z, [4 H3 j+ a1 |/* configure SysBios to use the lower half of Timer 1 */
: e2 o6 T$ q9 {2 ^1 gvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
$ ?2 g; y2 E, m# V# d1 C0 E% \% B8 U6 Avar Clock = xdc.useModule('ti.sysbios.knl.Clock');
# @  I) M$ M& V6 dTimer.timerSettings[1].master = true;% Q! A4 }: A- }6 F: [
Timer.defaultHalf = Timer.Half_LOWER;
: F3 q! }# f7 J3 I$ {7 z' G1 xClock.timerId = 1;
6 E0 m/ Q' h4 O$ t$ r- X  n- A! |* v+ G! P, v. ^$ h  k8 h
1 o# y; k+ d  Q
/*
- i9 I7 v% Y9 i, m *  ======== Miscellaneous Configuration ========
: f$ D- K+ w4 y, T7 } */5 l& D7 j5 \" T% D! a% I- I' i
7 J# I5 P* x. {, G' g. o
/* set default diags mask */9 W2 L) X$ X: K. a
var Diags = xdc.useModule('xdc.runtime.Diags');, U8 T# _8 ^, t; Z3 z6 T
var Defaults = xdc.useModule('xdc.runtime.Defaults');
/ V* T: ?* {, n5 Y9 D: o3 R. ?" ?% z4 w4 o# B  [
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
) S9 r% w3 Q- f6 c1 xDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;; P' z1 k2 G8 J3 m( |3 z, \! Z
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;7 {6 J+ {9 H/ w8 Z3 @
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
- F- o' |) N- f$ y7 G. Q2 S/ k! GDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */5 H* \# g$ Z3 O! ^9 j5 S5 n% ?
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;# F! W' L. u$ R  ~: v
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;! O, S3 s- |! \& U2 [$ m
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
% u- [2 s* i0 Q) p6 CDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;; X4 @7 w  K& ?6 R) c( W
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
+ X  f( o8 f  oDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
: Z3 H  g$ G. `5 lDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;  h' u# k+ N; \
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;6 j" |6 p8 u7 F/ u8 R( Q- u; s
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;3 e5 N! v# O- }0 J" E' g
6 `" X) S9 l! j, b
/* override diags mask for selected modules */
% @' D& ]5 M: J% o* T. Wxdc.useModule('xdc.runtime.Main');
, \- ~4 p' g/ W9 G; ~% c1 H+ {9 yDiags.setMaskMeta(& V: L1 B" h. H$ S& q1 h
    "xdc.runtime.Main",
  d$ p. n- j& q4 _, T    Diags.ENTRY | Diags.EXIT | Diags.INFO,
3 j( X' n; k7 \: X4 k    Diags.RUNTIME_ON4 b* G+ K% g2 k0 L4 M/ ^- }
);& l8 [( h# C- e$ m8 h5 {
+ H3 c2 L- U; I2 j7 |- n# b
var Registry = xdc.useModule('xdc.runtime.Registry');# Y7 ?$ s8 I( e: Y4 h" ^9 u
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
& ]* w5 I% N8 t8 P! M5 W: ZRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
- r% \$ r! q2 _. O6 cRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;! C& J* |- K; T5 n
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;% X5 K' ~: P' R9 S3 i  M. x3 ?9 v
) |7 a0 _& D8 V" V
/* create a logger instance */
% \8 K# t/ Q* S* Z+ i( Uvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
) a$ b& U( B2 g2 S1 N. N) mvar loggerBufP = new LoggerBuf.Params();5 [9 z3 t% V" n/ P3 y
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
  P& e9 \4 C+ y9 @1 ~2 L7 V" {7 @/ \loggerBufP.bufType = LoggerBuf.BufType_FIXED;
+ x5 C' _" l. _- O. s, i( d( X9 I5 C0 a& N4 F- g
var appLogger = LoggerBuf.create(loggerBufP);
- _6 U- }6 s4 G3 a2 PappLogger.instance.name = "AppLog_Core1";
$ E4 E- a* r; d, _0 CDefaults.common$.logger = appLogger;
- R- `8 m, ?. `. u: TMemory.defaultHeapSize = 0x8192;    6 J! Y- `& R4 Z' K
Idle.idleFxns[0] = "&LEDStatus";/ s- V% P+ J5 p4 C+ l1 ~6 B  D, K; \
Cache.initSize.l2Size = Cache.L2Size_32K;
( H1 p7 h0 ]# W9 y/ T8 \/ E; G, |, t3 V
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-28 03:23 , Processed in 0.051097 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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