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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
" B$ e( ~# \" b, e! Q! \" L1 B  _7 }% H1 Y" x. k8 d+ R" W( ]  k
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256! V( R7 _7 y) M3 @
/ `& u8 K3 D" T! n9 s
其他程序段。。。。。
: ?* N0 N" `: s8 `2 r
. p" d4 L; V. o9 I( ?: o6 R6 R( L   free(x_d);7 W0 L) I: W$ K6 L9 W+ V
. }6 P7 p3 N6 H8 L! t& ]- w" M
使用DSP侧单独调试功能,验证动态申请没有问题,
) Z+ w4 Q3 I( A
% J; Z- M5 c! q# X0 Y& s9 y" Q. p& X但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
& R/ ]: X$ C9 o/ R3 L9 ^* G

0 B- d# D* B& `+ v! O. H) T; q" d4 R0 w

2 s( ^6 G2 Z3 |! G4 p/ l1 u$ v6 K7 @0 Z
. f( p! x5 X3 H# C
4 `4 @2 s# O, F) b* a$ G% ?
; C4 {( c  n5 h4 q  k2 V" ?* @" h* c! ?& t( ^( }# \+ [0 t
$ u1 [( i! I" ~9 p8 A

  v& e, S; b8 m4 s
+ h6 e' m1 p! W* d$ b; K: c) M0 B9 S
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明3 G: \3 Z0 D( l  c* x9 O
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
4 z7 B0 T* k* S! _% I+ t(不过疑惑的是,为何单独DSP仿真就没有问题呢?)/ p& Z7 A+ o4 C4 g

/ `/ C9 {3 `( e4 N+ X3 @是不是需要在DSP.CFG中进行配置
( L- D& I% o2 k3 v4 N9 h我现在的配置为
4 W( x  z3 x% J8 J1 Q7 F' e" C% ^( A6 L' |* O* A
/*
% F/ c  I; i0 k7 \/ A: h: \& [. V' u *  ======== Operating System Configuration ========; x$ x3 v/ B" [' A) z( P" Q  d+ k
*/
' y# L/ W; ?( [8 {# O' v
/ ^9 f0 M9 e- ?/* no rts heap */5 w" z0 L: Y% |* T" O
Program.heap = 0;
2 ^' A; m6 T- F8 I- }1 PProgram.argSize = 100;  /* minimum size */0 f( P! L/ Z9 U) W' v0 F
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大% L/ c# J9 h" ~1 F

; Y  s  h+ G' K% M6 x/* create a default heap */! F! N9 r$ X5 `3 F$ h
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');9 [) w  w* C% Y. N
var heapMemParams = new HeapMem.Params();
6 x3 d0 m/ c+ cheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大" s) N' X; I" j1 Q$ }! B

' S0 D+ X# f+ `  K5 N2 H9 B8 F
var Memory = xdc.useModule('xdc.runtime.Memory');5 C: Y* k& E! _/ R6 x# m/ M
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
* W$ S8 z- V1 T/ x6 g. @  ]) F3 t7 f2 C0 H8 n, [
/* configure System module */
) N8 c0 R  E+ {) U0 f! pvar SysMin = xdc.useModule('xdc.runtime.SysMin');7 G7 T9 z4 z2 p0 n
SysMin.bufSize = 0x1000;
# _4 g" b& P. S: WSysMin.flushAtExit = false;/ O' g! x- D* {1 |
8 ?, j5 M8 C; |# K& R0 Z( @
var System = xdc.useModule('xdc.runtime.System');
# `1 r! b$ V- B! KSystem.SupportProxy = SysMin;3 w$ h( V) r6 Y, I! q' \7 n* X
# I6 N2 P5 i4 j% J8 y  G
/* configure SysBios to use the lower half of Timer 1 */8 {7 U5 G) u6 e* m
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
. M" E1 d! l+ y+ t6 c3 s, Bvar Clock = xdc.useModule('ti.sysbios.knl.Clock');! L; X: c% R0 ]9 P! s' W
Timer.timerSettings[1].master = true;
* J% @% c. i0 A( p1 e- J& ?Timer.defaultHalf = Timer.Half_LOWER;4 J- H- N5 D! E/ y0 X/ V
Clock.timerId = 1;
0 \+ Z3 s3 Y: I7 F
8 r) R. X+ ^& l, k& l+ {4 N. D4 o& l+ m5 n; ^/ Z
/*. f3 I, @) u" V5 K
*  ======== Miscellaneous Configuration ========
5 q" f* z$ r) W- k" u */) C- V2 k% N7 }  p  u! m( |

) W5 f( |  n  ^% ]' |" t/* set default diags mask */- P4 i; L- d3 E9 S$ E) h2 n
var Diags = xdc.useModule('xdc.runtime.Diags');! Q: j2 m0 @& ~3 g8 f5 V& y
var Defaults = xdc.useModule('xdc.runtime.Defaults');1 n# q' H( k9 m' B0 o

4 k1 n& B8 \$ P; FDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
/ y+ I  v+ Q$ e6 SDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;# ]' @' v8 e# Y& [1 r  _; o7 d  [
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;- `1 F. P, W. f* S
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */0 j7 F; ]7 I  F3 d3 M4 }- h  d
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */7 {4 \( [  @6 F- A+ K$ k9 Q
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
6 h* M; k4 Z$ oDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;: n; [: s/ W1 K! I4 V9 w' `+ @
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;3 u4 U( N" C% a# f3 ?, a
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;5 ~) w" x; J- t0 c" y* E+ g
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;1 n* |# k- o4 r0 A$ @9 Z. `
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
: ^, F) V: V9 L; T! c8 C% K  qDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;  c9 P& T* U' n
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;. [$ Y) c* a+ x
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
2 j. F; Q0 l5 J2 u" L0 K: q: E) G7 p
/* override diags mask for selected modules */! |0 `7 a6 T7 N5 ~4 t
xdc.useModule('xdc.runtime.Main');
  e+ ?0 ]# x& GDiags.setMaskMeta(4 p; y1 {5 H1 }7 p$ ~) N. B
    "xdc.runtime.Main",
! P$ {. O$ q6 x- Y    Diags.ENTRY | Diags.EXIT | Diags.INFO,$ k# E4 c2 q) _# e# D
    Diags.RUNTIME_ON
; Y% f0 h- x2 a7 n);
/ S- _6 E+ k1 T& [% y) {( t. P' J* c& O+ q3 Y' ]+ `4 ?7 n% G
var Registry = xdc.useModule('xdc.runtime.Registry');
1 b2 S5 T, l1 \% G& l5 qRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
% k2 e* b8 N' m: E# fRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
% b! c/ i# j8 KRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;/ b: A" C9 E7 c9 t  c. s# N8 I
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
2 L1 t( a9 A* r0 V2 r% K  l3 ]' H+ M- L3 _' E6 ]
/* create a logger instance */
$ q# p0 u! a3 M0 rvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');/ c' [2 D( O' f0 W8 o8 }8 `/ [1 y! Y  V
var loggerBufP = new LoggerBuf.Params();
' ~% N/ }. A  O* a$ uloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
  ]" x' D" S% B7 i9 s: {loggerBufP.bufType = LoggerBuf.BufType_FIXED;# |* s' k# h. U

3 ~3 n! Y- F9 A- e4 gvar appLogger = LoggerBuf.create(loggerBufP);
2 L5 r4 e1 |2 J: eappLogger.instance.name = "AppLog_Core1";
7 q' S1 t$ K& X$ E! kDefaults.common$.logger = appLogger;; |7 z% d2 m1 ]& h4 i
Memory.defaultHeapSize = 0x8192;      \& m  Y) b. O. Q
Idle.idleFxns[0] = "&LEDStatus";
0 Q( e2 |  Q, fCache.initSize.l2Size = Cache.L2Size_32K;  a, \- e. L. w' i

, r% O+ [9 u- i1 n* V, A  p# J% \; {
回复 支持 反对

使用道具 举报

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 */6 R3 s0 r9 N" o3 r" E
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');. t: e0 @0 b& z6 v' U
var heapMemParams = new HeapMem.Params();
# c1 z4 `9 h2 ]/ s1 CheapMemParams.size = 0x4000;
% E( g" g+ ^: ^1 S* \
1 y1 ^9 p0 `, T  bvar Memory = xdc.useModule('xdc.runtime.Memory');
% U- m% J3 D/ ]Memory.defaultHeapInstance = HeapMem.create(heapMemParams);+ L/ X' J- `4 d) W8 [6 V: Q
4 p( \1 P$ W" k; ~/ ~
我大约calloc  每次共计大小为5K*16bits,
: w8 s- V8 t/ c' ~/ [而默认配置才0x4000、需要改大。% x6 E6 M) o$ b/ C. z
0 s4 g$ E2 y# ^4 Z% g$ @% m
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */( B, u; H. U; r7 z
Program.heap = 0;
% N9 Q: h4 q/ fProgram.argSize = 100;  /* minimum size */+ r2 V: f5 {. o( x
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-21 18:19 , Processed in 0.043978 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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