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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构; e3 G& Y! A! R7 ~# D* m
5 s& U: N) k/ R: ^7 P) j; Z! r' I
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256; B. w  `% c8 j

( p" u& Z' S) D& {, C其他程序段。。。。。* s# N9 C/ k2 e# B. X
; r9 Q$ X; h# g! Q
   free(x_d);
: h2 {* a7 e' z; b8 R9 u
- [  A2 i$ h1 n5 B使用DSP侧单独调试功能,验证动态申请没有问题,
' Q' y2 a2 b( M4 I* f3 X. ?( X
3 l2 l: m$ @" ?- g1 Y8 e5 E* h  ^但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
2 w( S& b* F0 J7 @

$ ~* E( O* ]  `4 _! |" m- ]
& i8 y( X9 `% k+ g; p
+ F8 t4 D. o5 a$ r; f& s3 x
; |' L! P" W# e! Y9 G: n& k( Z9 ]6 A$ P6 ~( b- c; Z
9 u) X( i: J4 U8 S# F8 ^
# v) ]/ U( h- h1 Q
" r0 q: a/ d3 _  g9 i6 I
! F) k) p4 [  e$ B; c  d
  @0 W! V, C! f; ?7 _
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明, h; D5 t  u6 G. G
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
' z( ^* F  n/ J  [" @6 U(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
8 T( F. s+ s( y1 h2 b5 I0 n
% H4 w, F/ {; Q7 T9 b8 Y
是不是需要在DSP.CFG中进行配置
! |, c6 m% n' ^% |* [我现在的配置为7 i4 r6 P. M0 X* s: M
) j4 d1 a( w# o# P3 L4 p
/*
( ~! ?! Z9 ^% F *  ======== Operating System Configuration ========: u7 H: H: n* I3 I4 i
*/
# w/ \) ?& E! K9 _: ^6 O6 d, X
/* no rts heap */
& B- e) L( l, b8 a0 zProgram.heap = 0;0 F9 V3 U: S& K5 L( l! g
Program.argSize = 100;  /* minimum size */
4 C# F) W8 @( T% z1 i& kProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
; R" j( ^# n' _( t
3 X3 P3 P+ b" V- c/* create a default heap */
7 H; \* f( E6 T( b3 q. Jvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');7 q6 I, A. y$ i
var heapMemParams = new HeapMem.Params();& r1 q( t6 C2 ]! _. b6 V
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
8 \; P( s5 j5 J  E# H7 U9 ~/ B' h
" m" C( r) R# L! }) S
var Memory = xdc.useModule('xdc.runtime.Memory');
$ |) Q7 A9 w: H5 X# ZMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
* t7 Q! l; ^- d, t2 m) c6 T
, k$ g/ ^4 ]1 c; v: a8 x/* configure System module */9 y4 y8 p: r8 D0 H6 X6 n( k
var SysMin = xdc.useModule('xdc.runtime.SysMin');
. a5 m4 K+ s% Y! ?5 O5 ASysMin.bufSize = 0x1000;  U; l8 N/ B0 E+ \* G: S8 @
SysMin.flushAtExit = false;
$ Y! w" [. ^$ R% ^6 B2 ]& ]! ?, f# h9 d4 @" k# c3 w
var System = xdc.useModule('xdc.runtime.System');
: q3 A0 P2 r( o* A2 c( D$ A7 B7 iSystem.SupportProxy = SysMin;4 b- K# j0 R5 Q# V: E
# O3 `- w4 M- `2 ?* Y- B$ D
/* configure SysBios to use the lower half of Timer 1 */
, F5 A9 A9 ?$ c" I0 C) Y* q/ dvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
, W1 ^( ^+ f( [0 Q5 V& @6 X# G! b  J  uvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
# J" ~" D9 S- n' ^2 sTimer.timerSettings[1].master = true;
$ W. _2 g% F( M! J" m% WTimer.defaultHalf = Timer.Half_LOWER;
5 g- e: i- R- U% T0 g, P- xClock.timerId = 1;
0 Z6 U9 `' Z: e' g2 E' D" M, z" {) p3 U; `- |; A
' ~0 N+ p' [0 e" a. i
/*
9 F$ U3 [- m6 @' p, r" z *  ======== Miscellaneous Configuration ========
0 d. \6 y- u. x9 U! y/ V. @2 \) I, B */, o  e# ~, U0 o/ O4 \7 `7 P
" t6 A5 s9 _$ @+ |0 N. t2 N
/* set default diags mask */. d- ?5 H5 c* H6 n- k- M
var Diags = xdc.useModule('xdc.runtime.Diags');
0 D7 I1 P9 y) r# X7 v: kvar Defaults = xdc.useModule('xdc.runtime.Defaults');
+ ^- ?% |& Z2 ^2 d8 p  ~7 H& r/ ?' ~' y  i0 x  _
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
' D; I, K  k' i1 h3 kDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
& ]3 x2 ]8 c7 u5 \3 O8 L5 [4 U( ^Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
; u) L" l! Y' RDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */( D3 O$ @; a; O% K
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */. x2 K) C8 {) x8 A' A3 X) w7 g
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;6 {% L5 E5 Y1 F$ n( D) M
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
2 x4 j0 Q9 [  e2 M3 Q7 Z! oDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
7 X! {1 r6 j! N: P  Q. jDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;: W9 d( E3 M9 k$ B
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
  `9 ?0 y7 H3 A! lDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
4 ?' x/ c  w' r+ x6 P* L1 ZDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
. d7 \# `0 k9 e) I- u+ rDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;- c: t) O, a2 g; t* b% y  B/ U+ L
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;0 m7 K/ ^: `1 p! m; [- g7 t) f
. }7 P' |) n3 h: ?& u
/* override diags mask for selected modules */
  c+ l9 D& r& E# _xdc.useModule('xdc.runtime.Main');
3 |* ^; Z2 \) [0 }Diags.setMaskMeta(
' T! X: a# w+ @# \( ?    "xdc.runtime.Main",% B2 u. ?: ?5 U& j1 b
    Diags.ENTRY | Diags.EXIT | Diags.INFO,9 n' l# y6 G6 P9 r1 T
    Diags.RUNTIME_ON
0 z3 y$ m; h7 [. O: n+ F);! D: k, S- D8 W0 {
. E0 p8 D1 i$ w! {3 I" u
var Registry = xdc.useModule('xdc.runtime.Registry');
4 O8 ^  M. @" C) b/ m2 Y  Q9 oRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
  G$ y* p& D% w0 x/ u0 PRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
9 X8 V) L& N$ ]5 Q, G- N' [Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
5 c0 M# e' j7 {# aRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;& S" ?& z* w& P# W* u, s4 _

$ {5 C' r$ G5 o; M* P5 Q3 l- a4 N/* create a logger instance */0 V4 n3 N7 c# c) n# p& ^
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');3 ?: t: [7 K% j# i: p
var loggerBufP = new LoggerBuf.Params();
- h- m# S5 w. f0 m4 s- `loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */! I, ~1 l& {) G0 R
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
9 H0 b: P$ E8 I7 k% c/ _, V3 D9 v1 j" [9 L) |7 C9 g& \
var appLogger = LoggerBuf.create(loggerBufP);
0 e3 Y/ \( `4 Z3 HappLogger.instance.name = "AppLog_Core1";
# E! D* t) o: Q$ TDefaults.common$.logger = appLogger;  v" W/ r6 X0 b7 S4 M
Memory.defaultHeapSize = 0x8192;    & g8 q7 Z! q8 }7 a: J# x
Idle.idleFxns[0] = "&LEDStatus";
1 M" ?& {# w& b+ ?Cache.initSize.l2Size = Cache.L2Size_32K;; y) r, p! R& N6 R" g+ o

* q2 X+ G( t1 o( o
回复 支持 反对

使用道具 举报

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 */
  K7 J8 A4 E5 n7 ]2 xvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
, x7 Q4 }, P# n& O1 z' w6 B  Gvar heapMemParams = new HeapMem.Params();
& X: C/ _; D9 ], f3 ^& s! HheapMemParams.size = 0x4000;
- I; c0 N1 d2 j, f2 \! ?% _( B$ G' g# [. T: C5 P6 a
var Memory = xdc.useModule('xdc.runtime.Memory');
2 u/ y- C9 R4 c7 H6 k* ^Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
, J0 D+ e% n; ?2 X
  K* y; d: n* D我大约calloc  每次共计大小为5K*16bits,& S! Z) ^9 e$ j# ~
而默认配置才0x4000、需要改大。
- X2 ?! F9 K: D( B2 I( j4 |( B* n
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */( V- N+ t" V% r' R4 ]+ x
Program.heap = 0;
/ P. y4 e8 C5 nProgram.argSize = 100;  /* minimum size */* T1 T2 K. ?' ~2 a* r; z
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-21 19:35 , Processed in 0.063596 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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