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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
$ o3 x: S# m6 `! h2 O
# s/ B4 a. ?! X9 {% _9 G    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
. \) G8 L$ O5 z. K
4 m, \% |# B9 W  ?6 O其他程序段。。。。。
$ d/ }! Q4 z& k& b% u: T# G+ |# m9 P 2 W2 L2 G2 k) m2 F2 c! r) M. y
   free(x_d);$ M- R7 R' g' ?# e6 h9 E2 ~

0 @9 w5 z' j5 t1 K5 t使用DSP侧单独调试功能,验证动态申请没有问题,
# A* z; o- u, g) t- F& q# B
- Z# R6 b5 O$ F5 X但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。6 z, s. }2 @" q* Q
8 _$ ?* w- w8 n2 @7 k& C, s

3 t' _$ o7 H/ Z) |- S$ x5 g, q3 `5 I7 D$ m! I8 O
: s7 M8 Y' \" F7 A; [# f
; p  z. k9 j, C- Z( F

% M! p! e; B% z$ d6 J/ ]# \7 P
/ g4 y( t5 e5 ^& t& m( X* H4 i* f+ H% y! p  A) X5 T+ Y
+ y7 l# G1 a8 q# |, R( L
$ ?; A5 t9 N: t9 T7 ~5 y, u( o
分享到:  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 */
8 y0 x/ m" S+ V/ l; r7 lProgram.heap = 0;
$ z# m5 Z2 ^$ z" oProgram.argSize = 100;  /* minimum size */9 ?  T. M/ V! B( [1 U  l6 |5 w
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
" E1 k/ N  |1 o! b. tvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');2 j7 U' O, G: D
var heapMemParams = new HeapMem.Params();3 i. q$ k0 _' E) W0 {, {
heapMemParams.size = 0x4000;
1 X) s' R# b- @, w( Y) b+ S, ^
/ x( z! D+ n" `" dvar Memory = xdc.useModule('xdc.runtime.Memory');
& H- F& H$ t5 ?# Z1 x) w5 O2 lMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
$ T8 I' I, W' M- P7 y; n/ u
/ |4 N/ M$ Y' |$ u7 H我大约calloc  每次共计大小为5K*16bits,, y- g/ n7 [1 I+ n  X
而默认配置才0x4000、需要改大。
$ `' F( y7 M- \$ s  J# n* ], G' N7 N2 ~2 L$ D( i
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明) z/ \) t. @, y" D6 j/ ?! z
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
, w+ K; Y- V% C! w5 x3 k! W& {5 r(不过疑惑的是,为何单独DSP仿真就没有问题呢?)+ f9 z2 u% a0 y- }

# v" F, X. j- [' I是不是需要在DSP.CFG中进行配置
8 y/ v# U& O* A- }我现在的配置为
" y' q0 [. _: h" t+ ?
3 l- q6 a/ P8 w: L" s/*) h; j/ w. z6 y( q& X
*  ======== Operating System Configuration ========7 i: M* T0 b, s0 c
*/
* f" w' B% W. X7 F8 l  L+ w# b2 c: ?6 Q# a) S2 o3 L' O3 c$ w' l
/* no rts heap */
7 x: O% M& W" |& e5 LProgram.heap = 0;1 @, {7 j$ ?2 @
Program.argSize = 100;  /* minimum size */
: ?5 s( Q9 J$ O6 W- e) y: TProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
0 ~& y! O- b9 G) V4 R# l
5 M1 C: U7 x  S( H+ e, F/* create a default heap */
3 z3 J! F1 N# I0 ?9 d7 Y3 cvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
& u! J/ C. z3 i# U) X9 \5 h! ivar heapMemParams = new HeapMem.Params();
9 c! u0 H+ ]7 F$ [$ oheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大, l; i* B! s! @1 Y9 W. L7 m8 k+ |

$ \  T$ o5 w( h
var Memory = xdc.useModule('xdc.runtime.Memory');& j) P( L+ T' i0 |
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);& Y4 G" R3 ]( T

* a4 ~) u9 }1 g( O/* configure System module */
. }2 W, z  }' hvar SysMin = xdc.useModule('xdc.runtime.SysMin');
' `- K; a7 F6 \0 PSysMin.bufSize = 0x1000;
$ ?1 k6 A1 }5 Y( zSysMin.flushAtExit = false;2 ?- N* L. m9 i
& z; m8 p4 q9 q  J) k
var System = xdc.useModule('xdc.runtime.System');
# @0 j! F' H" @; V5 |8 C. O6 ]System.SupportProxy = SysMin;
5 e( ?4 Y! b$ T) F6 C& E3 X7 {6 p8 F& D  s4 ]: X9 B0 @
/* configure SysBios to use the lower half of Timer 1 */
( h5 w3 e6 t3 {/ K3 nvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');& ~, P9 _% H/ `+ Y( G
var Clock = xdc.useModule('ti.sysbios.knl.Clock');# `9 c1 G" W+ `( y
Timer.timerSettings[1].master = true;
, \, Q0 `! K& p( CTimer.defaultHalf = Timer.Half_LOWER;
% L- n" I8 R; J. |( b9 K! p% cClock.timerId = 1;
5 L: |" g( a3 k* |, @7 P# H) Y0 G& P5 T

& M. }9 L5 I1 F! T2 ~* T8 ]- ]/*
0 j+ X* y  W% x# F *  ======== Miscellaneous Configuration ========
! D8 ~( j/ l* p$ z. o */4 t& M) l6 g0 I
$ B+ L! M. U. W0 }" `9 X& R
/* set default diags mask */
2 o  G  m2 h; S$ e  C' x, v% |+ Rvar Diags = xdc.useModule('xdc.runtime.Diags');
4 |7 W) U' k0 V3 T+ }# S' ~  pvar Defaults = xdc.useModule('xdc.runtime.Defaults');
0 ?* r$ Q' Y# v% N# }& w+ {  C* m/ a0 E# h: p
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;, E4 Q. _8 L5 Q: y* w5 [
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
( c7 v' H# v4 L! ^! J. i( o2 h1 `Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
/ L6 _) ?6 I, T0 E! a+ lDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
( h4 w, b6 p; c) K' GDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */) |/ T  d9 i. b5 R
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;# \. T" ]4 Y% D: F) k' V
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
( r) c* F, X+ b3 U; Z' H. Q2 VDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
( w; G! z8 v9 h1 BDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;5 \* T7 w2 u% d+ z* W
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
) `4 {2 J/ Z6 n; H) k$ n3 n% \Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
  q! Z) C0 V7 mDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
$ l* w" [2 F; s1 V. i7 SDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;& L( {& F% P9 t# {$ K. x% ~$ s
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
/ |1 r& Q6 Z( y8 Z6 C0 P/ @
7 a& ^" I3 N( P/* override diags mask for selected modules */# Y" r  S# T' `' Z3 C* ]- X( I
xdc.useModule('xdc.runtime.Main');1 {5 A6 u& N, s' r
Diags.setMaskMeta(' M) ], O. X; T" H/ K
    "xdc.runtime.Main",
% I/ p/ u8 O: i. l    Diags.ENTRY | Diags.EXIT | Diags.INFO,
; Z* |9 U- {. {5 i$ u- }    Diags.RUNTIME_ON# J" N+ f' ^1 H; j/ K& W& ~
);$ s, G) V8 B& L0 Z( e# {
0 V- W. p/ t/ w* S# I; Z8 z8 r2 V8 e
var Registry = xdc.useModule('xdc.runtime.Registry');
! ]  u+ Z9 y- n! b3 K$ iRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;0 `  D5 ], a' c9 [- s" X- F$ ?
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
9 B% Y! s- `/ G! T7 u# j" iRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
* M! X3 c; g: V/ yRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;( B6 q( p7 z0 F* s9 m. s' Q( m3 ^
6 O( ?7 E# }7 o! t
/* create a logger instance */
2 w7 w! I' K1 d0 ~$ v, Rvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');' |( r; i" O2 U: r! I
var loggerBufP = new LoggerBuf.Params();
" {7 E  M7 `. u4 ~3 ZloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */2 U: ]# l9 \: n! `8 N' t
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
- {. h+ Z  c- y7 }# W
, J4 Z" d. H& \7 D3 F0 s! G/ E/ Jvar appLogger = LoggerBuf.create(loggerBufP);
2 z7 M2 i% O! sappLogger.instance.name = "AppLog_Core1";' N0 c+ c) ~& G+ A
Defaults.common$.logger = appLogger;9 j3 e! f4 x0 l5 b* c4 }/ j
Memory.defaultHeapSize = 0x8192;   
( c0 c* A7 O6 C1 wIdle.idleFxns[0] = "&LEDStatus";
0 _' @! ?7 w# z, F; R# T) qCache.initSize.l2Size = Cache.L2Size_32K;5 t( z) Y+ p, k" Y$ o. x

2 E7 D# P  Z. o3 n2 X* i/ k! u* j
回复 支持 反对

使用道具 举报

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

本版积分规则


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

GMT+8, 2026-1-13 09:14 , Processed in 0.047614 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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