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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
* B# c4 O) t% W
& b6 j+ Q( A5 t! v6 V& B9 n    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
! C4 S& U! Q( q6 ]: B8 K2 |' t2 b8 R; {
其他程序段。。。。。! P2 v' \1 C3 @) i
' x1 A: k( Q* d9 f. T, F' r: g
   free(x_d);# p: {: I8 ?, e; F/ J9 f

. l( E/ k. z9 H3 ?  H  N9 R8 H使用DSP侧单独调试功能,验证动态申请没有问题,  A. t* k8 i/ t9 s! x3 u

4 V4 i+ ~$ A+ L# p/ E; Y7 m但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。: s! q0 k- \6 m) R6 y0 K

3 a' T: Z: f' Z3 w7 ^
' l! Y) B4 v; J& p4 J$ H7 R
. t. w$ x! f% B: c+ f" A. l" ]" N- w

; U# S2 f$ m9 E: ~
/ E3 j- R9 c- h. K: J5 t! N2 h8 p% L; M6 Y1 u0 K: p+ B
  B1 e6 x, Y+ ?+ K  k- B
: T0 f' p7 Z. c+ L( _- E4 {
) n0 B& q: q, q
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明3 ~- Q" Y6 E  S7 x
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下1 l, o' f7 Q6 X) Z, x' g% h& G
(不过疑惑的是,为何单独DSP仿真就没有问题呢?), c  D/ u1 R; g# O3 ]' t
. P2 j6 x6 V& P6 G. X2 L
是不是需要在DSP.CFG中进行配置
+ R' D7 Q# C- Y4 Y5 n: e0 {6 n我现在的配置为
6 `/ R9 D  S, c9 w3 A1 M- A; p. }5 L- M- k! R
/*. L0 S( j* p. V2 F% F
*  ======== Operating System Configuration ========
5 I; w) G" q7 G, v- m6 { */: R4 g. D3 r" I( T. M, X
$ X( v! [1 [, u+ O
/* no rts heap */, Z9 J. i6 G  \" f
Program.heap = 0;
: [  t5 b. G3 [2 g( }/ K  wProgram.argSize = 100;  /* minimum size */$ {3 d7 d! j- n0 x
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大$ C' \" b( C0 S7 a' P) G$ E2 g1 K

) U# p7 n, ?8 Z: T/* create a default heap */
( C! J2 [. g* e$ T: q( q7 rvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');3 q! f- r7 A5 D  q& s
var heapMemParams = new HeapMem.Params();3 L4 v7 {9 ~4 |0 g% X7 o
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
; }) y4 R3 V# |+ `0 z! F& s% l4 M6 J1 u( ]9 \9 l6 h
var Memory = xdc.useModule('xdc.runtime.Memory');$ B! z7 C% x+ e7 g- a  o
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);  J! }5 ~& i3 i' K
. u9 P4 v, O: d
/* configure System module */
, j8 \6 t3 W6 ~4 j# H( r1 Wvar SysMin = xdc.useModule('xdc.runtime.SysMin');; b1 `$ f6 d9 D6 F& ]' H5 v
SysMin.bufSize = 0x1000;/ I2 x; N/ G* ]$ d" Y, d
SysMin.flushAtExit = false;5 X& M# E# J4 p8 L7 S% ~6 t
* F! Z  v: y0 v8 @& G3 V+ W
var System = xdc.useModule('xdc.runtime.System');
( X" E/ }4 i$ x# h' u9 [( E  K! f/ YSystem.SupportProxy = SysMin;. s7 {+ u6 G6 y9 P& @
3 Q! k3 _7 p5 d! b, z/ r3 q$ _; F8 z
/* configure SysBios to use the lower half of Timer 1 */
6 u% g$ ~! Y6 O; \3 zvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');; h' d$ G; i+ H4 H9 ~
var Clock = xdc.useModule('ti.sysbios.knl.Clock');5 \! R4 I9 X0 z  F: d' ^7 v4 I) U
Timer.timerSettings[1].master = true;
% x9 \6 S" y7 u, W1 e  x; tTimer.defaultHalf = Timer.Half_LOWER;6 g8 ]0 C" K0 A7 n- h
Clock.timerId = 1;' ?7 i! h4 O9 n! _2 D
. |" g0 `; Q; p

1 C7 t! l6 [1 v1 D$ r& S# O! c) U/*4 `" U- J3 ^# F/ }' z
*  ======== Miscellaneous Configuration ========9 u: Z$ B+ Y9 A$ q( d
*/
4 a) f9 V  ^" i; \, x' D5 C: B8 U- s) E+ N
/* set default diags mask */( F9 C9 v$ [# [' f" B
var Diags = xdc.useModule('xdc.runtime.Diags');
8 J$ R4 e# K" R' f( V8 d+ Z- {var Defaults = xdc.useModule('xdc.runtime.Defaults');
/ [5 e4 E- H5 `- T) C  m$ X# Z7 H8 t  d: d* x- E- `1 |  r
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;% _9 \5 F- C' r7 R" x, \! j
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
/ R" ^8 k# C5 |. DDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;+ j# Z" I7 g( d
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
  y, Q+ F4 g. k' _$ Y0 j& w% ZDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */+ x- w2 V( \$ {
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
) K; \0 |. L; X8 |) v+ uDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;# a- Y' c3 }5 M% F
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
' |6 W+ _# F; W. J" R2 uDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;) R% v( C) \( q2 X' A
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;2 \( Q9 q7 q# c/ @/ n( o$ C) N
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
# a' w3 |" `5 S% _0 b+ e" p! {4 ZDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
9 ]3 D' f! F9 R+ C5 o2 C/ ^3 nDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
1 H1 @6 l6 c7 K% R, N9 pDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
( W, m9 v# J! k, B2 J6 p1 T
$ F' V2 k  y3 j9 e3 M9 q7 @# \/* override diags mask for selected modules */
6 S0 P* G1 N7 s2 f# @0 H- Wxdc.useModule('xdc.runtime.Main');
- A! d" e/ l; c- h) p, rDiags.setMaskMeta(
" [* ^. n4 g+ s3 m( O    "xdc.runtime.Main",  J9 I. ~6 S& `- ?
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
7 ~4 f/ Y. {5 {  o    Diags.RUNTIME_ON) S! w" m  m0 r; M- Q- Y1 s
);
) t2 ?+ t2 v+ P( R8 L! r( \( h, z, c$ k6 b0 H: J& n
var Registry = xdc.useModule('xdc.runtime.Registry');
* m: w8 b  I9 m* d0 QRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;/ D+ t8 q3 N" u+ p: Q
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
8 ]6 V( a4 [  `Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
& Y: o- J" y! s# c5 PRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
& ]) R5 @, n; J
4 Q, a5 h5 g  R4 y6 O% Y0 ^/* create a logger instance */
/ j$ F! g, a  @: J6 u  jvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
( v" z6 P( p* O# ]var loggerBufP = new LoggerBuf.Params();/ @% Z& O  a. {3 K6 [4 a
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
# F  |8 i( G0 D5 }( [/ k  wloggerBufP.bufType = LoggerBuf.BufType_FIXED;
4 r7 J5 W' J7 p7 O9 ?3 \% A# l4 a* a( N3 V6 k5 m! ^$ J4 K
var appLogger = LoggerBuf.create(loggerBufP);1 s6 q+ E5 _, N
appLogger.instance.name = "AppLog_Core1";
* p, Y1 I' r& ~+ wDefaults.common$.logger = appLogger;: @3 `0 G0 u8 F; C/ Q5 E
Memory.defaultHeapSize = 0x8192;    ; n& Q  g1 ~* g% V5 T' D4 _
Idle.idleFxns[0] = "&LEDStatus";
9 f" h- }2 [+ h# j& WCache.initSize.l2Size = Cache.L2Size_32K;3 q+ _4 O, T' X8 I

. j) J7 p$ T+ U' X; t
回复 支持 反对

使用道具 举报

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 */* q7 N# S  X! v& e- f4 v
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');( o( O" w- Z. M' L
var heapMemParams = new HeapMem.Params();
! b! f- Z: M3 {" O& u) eheapMemParams.size = 0x4000;4 S# V2 _0 c7 U. e$ ?

3 Q7 y. u* |% y2 Z) E+ Avar Memory = xdc.useModule('xdc.runtime.Memory');) M5 Z5 ^6 w7 @; T: L. ~" b3 [& g: Q
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);1 r( W' P6 ^- P* s3 a/ j) b: u

4 R5 p4 L( T" K1 B) v7 R6 R我大约calloc  每次共计大小为5K*16bits,
( x, y7 P. g" D- C而默认配置才0x4000、需要改大。
6 m( `* N% u& h) C8 E% y$ A. J, h0 z6 S7 g. l; {0 a
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */3 K4 ?5 _$ e6 r9 f7 p
Program.heap = 0;
7 I7 L+ o: ~# {+ S  FProgram.argSize = 100;  /* minimum size */
4 Q" g% E8 X2 _9 d3 d( g: VProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-22 08:27 , Processed in 0.043388 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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