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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
( P4 Y6 Q% Q% U
9 d+ E* B, C. X! }* c% o    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
' W: o+ B0 C, f3 L/ O# {8 c. }1 C; ]- p
其他程序段。。。。。
3 w. }9 q  n2 j, Q6 {( u
" [. Q8 F3 G0 q! `   free(x_d);3 x% u) K3 U, E7 W: `  k0 @. J7 E
# x! D/ c$ j( d! ~* C9 s9 r* f% a" I
使用DSP侧单独调试功能,验证动态申请没有问题,
# z+ y' M. }9 M7 f8 d. _9 N% t) n& L" A/ h. S! {7 q
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
2 f" K2 p, I: b" B$ T7 V! l6 L

0 k! g) N  F4 q6 F) h& W3 I8 A' Z  @/ L* z* y

& ]  _6 ?4 L  U3 ]+ [! R3 F6 r! {6 }5 Q1 C% {
. o' V* Q# V( }& ~* l, t# b
$ K/ {% r% Y1 ?* I4 K: O
( Q, P: _- k" B

/ E+ h0 i, H( S& A* F' W& K8 m/ [: S( Q) j6 x/ l2 N. r6 W/ L; {
* K% r: \; _) X% b4 r
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明4 f  q! @3 d' U0 k1 B: P4 s7 |
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
& c9 Z3 r  C2 E* Y( x7 V(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
" ^1 u2 G5 ~* a2 k( Z6 _$ q5 R0 V
1 c, \. n" n1 m& u6 \3 y
是不是需要在DSP.CFG中进行配置: {1 L# T& G$ h, @8 b. E2 {
我现在的配置为
: u) ]3 |7 w6 `( Y9 e& S  D! D$ m, R, e& G
/*1 o4 ?7 @) X2 A# s, I4 [$ Z
*  ======== Operating System Configuration ========+ |! n+ K/ [, U& G
*/4 r0 o+ g) b# M) W6 I: m+ U
, n/ _& q. W- T) z3 t4 A8 A8 \
/* no rts heap */# v$ e) H! {6 h! O/ Q
Program.heap = 0;2 y: T6 @$ l- \5 g
Program.argSize = 100;  /* minimum size */! @0 X- R* p) ?, T7 b
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
; x% d7 w( F3 O/ m' B- q4 \: Y* i# T/ u! a4 `. c' d0 G# R
/* create a default heap */! b8 X$ Y7 G$ s/ q8 |
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');- e0 k; |' M3 [
var heapMemParams = new HeapMem.Params();
8 t% r9 F4 R* EheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
! ]6 |/ z( O( j8 }0 i2 m2 L3 Q  g1 M2 T" G
var Memory = xdc.useModule('xdc.runtime.Memory');: ]0 `2 [" M; ?# p
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
+ R# c1 ^4 V) j+ h3 R9 i/ ^4 ~, Z7 a, @0 r1 C+ _
/* configure System module */
* k* C! ~1 S! {, p% @* |var SysMin = xdc.useModule('xdc.runtime.SysMin');
5 D7 S# M! f1 A, b+ R1 L: LSysMin.bufSize = 0x1000;
7 H: V6 {8 Q! B+ l# n% [SysMin.flushAtExit = false;( S/ z2 ^( C6 q+ F9 X) `

- W/ M: x& I% L  X9 Zvar System = xdc.useModule('xdc.runtime.System');5 ?6 Q6 @) x2 ^) b  W+ @! ?
System.SupportProxy = SysMin;
! Z9 h1 W) S2 _2 ^+ c+ n( I, d. h  D5 \( [4 b0 a
/* configure SysBios to use the lower half of Timer 1 */
* d9 |9 G" t8 m2 y# u" q8 u! Mvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');3 j9 N  O& Q  y, l7 h6 S) S- z3 P
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
  r: u/ B4 v' I$ F' C3 pTimer.timerSettings[1].master = true;# T9 V5 Y, B; T. Q
Timer.defaultHalf = Timer.Half_LOWER;
& x' U% }5 X) x/ j* b6 qClock.timerId = 1;
$ F0 m7 }& r( G7 D
7 v9 |- S# p7 h  \. C- ]
# S7 {' g; |0 g9 G& Q/*
9 g* A% v0 G* e- z2 a *  ======== Miscellaneous Configuration ========7 ?1 n! ^+ w( I# ~1 j1 `  s, y, B( }
*/
0 D6 U/ Z% |- b) q. M
- \. w) T5 P* [, o# d/ t5 _7 ~/* set default diags mask */% i& P% h9 v0 b
var Diags = xdc.useModule('xdc.runtime.Diags');
  V& ~4 L/ l9 @, gvar Defaults = xdc.useModule('xdc.runtime.Defaults');( l: j  N! D- J; P# r2 O# n4 ^: S& H

; W& R. V% l- u4 o$ U1 \Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;3 A9 F% B+ V3 s$ c+ v9 ?
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;# ^6 B) E$ h' Q- h8 l& [( ?
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
0 `  I* [% s1 u0 g" y; C: XDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts *// ~* I1 }- g) i5 B
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
# w: a& u# f% g& o. y1 Z! fDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
3 ~8 w: d, Q% E8 M7 bDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;2 s0 m/ G  n- e  {. j
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
% \7 d$ h7 w) T$ kDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
! X2 L8 X! y$ C- a5 ADefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;; `8 M3 C' q5 g  q, L1 O5 W6 |: n
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
9 e' L* b7 H( ?3 j( l- nDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;  H6 ]9 r( p2 _
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;$ K( q: }$ m9 B8 N- l$ |2 b' o
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;0 U+ D9 n. u+ Y

8 {1 ?( S! S& F/* override diags mask for selected modules */$ B: b8 z; ?% C3 i8 ?2 t8 Z
xdc.useModule('xdc.runtime.Main');
7 z% t) L- ?" V, `2 ^5 rDiags.setMaskMeta(7 ~5 T$ n8 p& ?* B
    "xdc.runtime.Main",& L% R$ O7 V! P% _+ P
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
3 ^% X' ^7 W- n+ y    Diags.RUNTIME_ON
$ }% ?; h9 G+ J/ y" ^);
5 c' m' K7 o1 o0 z3 ?
' o# H  ~$ `" f/ n, @/ K. G* bvar Registry = xdc.useModule('xdc.runtime.Registry');6 L# c0 {1 P5 v; n
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
" A5 m5 f! |, k1 _9 R  c& m  pRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;1 R, T/ W: n: Q1 Y
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
2 l/ W- y$ D& }Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
4 c" K) V9 o: ?. ~3 ?- w9 o, X0 e0 N# D4 P0 p( H( |
/* create a logger instance */
0 b: Y+ B% M$ j- ^' y& t) }9 Ovar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');! r2 }. M! S8 B# U; n- r
var loggerBufP = new LoggerBuf.Params();5 a7 g- K0 n: Q; M" U% B
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */! k; N/ H+ b1 w( T
loggerBufP.bufType = LoggerBuf.BufType_FIXED;- ~* ^: ]/ v6 a1 p7 n9 L

2 e9 {, T+ {& zvar appLogger = LoggerBuf.create(loggerBufP);
! b4 p9 }4 Q# G' JappLogger.instance.name = "AppLog_Core1";! b8 ~2 R4 L5 h  i2 d! W
Defaults.common$.logger = appLogger;$ l; B/ f. T3 g/ j0 F5 e# T  C
Memory.defaultHeapSize = 0x8192;    / y0 h- u1 U% O  |" B) U
Idle.idleFxns[0] = "&LEDStatus";. }$ H( \1 [2 ~" B$ t% ~
Cache.initSize.l2Size = Cache.L2Size_32K;
* b& w% ^1 S% d  I- s, q
- L& Q. C  j# E7 p, [2 x4 u
回复 支持 反对

使用道具 举报

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 */
$ A, W- A) A3 L# z8 r+ Z) hvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');; j" \- l/ x1 ~' A# r7 r/ ?+ u
var heapMemParams = new HeapMem.Params();
  |% {0 m6 W/ f4 t' u" {" k/ t2 KheapMemParams.size = 0x4000;% Q0 r6 T0 g2 F

6 A) }. h+ e* t! U+ g1 pvar Memory = xdc.useModule('xdc.runtime.Memory');
. h+ D! y. G9 ?" kMemory.defaultHeapInstance = HeapMem.create(heapMemParams);& u/ G* A" V5 a( i0 @! c
, r5 S. w/ T! D0 T9 |. U9 n( ^8 G
我大约calloc  每次共计大小为5K*16bits,' r! A7 k* ?9 N5 |/ Y
而默认配置才0x4000、需要改大。
7 l5 H- L- W3 K- X4 i6 X  K1 `7 d& j" E  g9 R6 U5 p# V
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
# `: |( A: q- ^: YProgram.heap = 0;
+ G, |2 x$ `) Y7 C4 \- sProgram.argSize = 100;  /* minimum size */0 F2 B' G" E3 q6 `0 w/ q/ t/ P1 ^
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-4-8 01:41 , Processed in 0.040346 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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