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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构* l+ b7 w7 `* o9 M8 M6 X

  t+ e2 u# x2 C, |1 r' D    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
9 S6 J* G. S3 H% K
# ^1 ^. I  S' n! y6 j其他程序段。。。。。' L8 `7 Z8 J$ P8 V" n. y

# o8 K) A9 S6 A( d   free(x_d);
$ {9 c9 {' Z. B" g5 U( A+ n- d; f  h
" O! Z& y9 v+ @  A1 L5 A. C使用DSP侧单独调试功能,验证动态申请没有问题,
! ]- i' a5 B& i5 \8 c: e# `( W% `$ y! Q# @: c& k. S
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。  k8 f& b" [% u) f% x
0 Y% q6 G; V. @! N) D

7 h7 Z. s! U* w, q
' `( v# h" N7 W! @" Q7 S6 O- U, ?* p  }
' \/ X" ?6 q; r1 F3 t2 [

# q* ~. v% X6 O( q9 D! Z+ K: z9 u: a8 c' G/ u+ S+ J

0 b6 Y( a2 L6 ^( q
, C- e4 A- Z( E" F9 Y- [  p2 X  Q7 ]  |1 G$ G  M
分享到:  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 K; F) w5 g6 dProgram.heap = 0;
" _+ `$ f( E: `5 WProgram.argSize = 100;  /* minimum size */
& O  t' P1 ^9 l) `3 \+ TProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
0 N4 k$ S1 h: h7 J* ]var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');7 ]" r% m9 w( _' [" _6 M6 o
var heapMemParams = new HeapMem.Params();! Y  Y$ d  D: X. y- I' A
heapMemParams.size = 0x4000;
( x7 S% r5 n8 y% `* }" `, K
! ]/ N, s4 E5 e6 V6 f& m  pvar Memory = xdc.useModule('xdc.runtime.Memory');
( V) P1 Z& L9 d" |Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
; ~$ M3 ~4 n! R) g7 E& p" [" |) L& c: \
我大约calloc  每次共计大小为5K*16bits,+ T5 K. D; ]+ r" h0 h* T
而默认配置才0x4000、需要改大。
% h9 G: b0 p* `9 D8 e
6 m2 S& S0 s$ T6 m( N
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明9 l% q$ ^: L! {  {
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
; I9 o: b" B5 o2 H+ W* E(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
: \* g$ Y. @: ?: x

' v7 @/ G3 z( A! u( E) {2 j' [$ ]是不是需要在DSP.CFG中进行配置
+ |! o; d+ @/ G' @/ Z+ [$ B; m我现在的配置为
8 k% }$ U$ A* `& s# Y. F% p  ?; b# s# B# H/ v3 h
/*
4 n4 n, p  V$ o* l *  ======== Operating System Configuration ========
) u: F  ^; c7 a6 ^+ M8 I */
1 ^6 p+ T, i1 j' C' T1 V" A
6 L5 f" T( V  M/* no rts heap */- P4 W* W2 s0 D1 U& ?1 q
Program.heap = 0;
3 F# L1 k' N. X: L0 bProgram.argSize = 100;  /* minimum size */+ `0 n1 M& m0 E6 d4 t4 r9 I
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大1 f+ q0 Y6 C; |' K) b6 D
; H, p( G! P/ X3 m
/* create a default heap */) y" o( r. V4 P* b+ O8 x
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
5 x" D$ l. _% m+ rvar heapMemParams = new HeapMem.Params();* S2 H% h1 t! D* b' p/ [6 W
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大4 K7 S; |) \% M9 n0 h

% X% B4 _% H4 e. ]6 ^* e9 G
var Memory = xdc.useModule('xdc.runtime.Memory');
) o: V# t% H+ YMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
) ^3 ?" Z0 d! y5 l" U" f2 o; f* S0 Z& d7 t  g
/* configure System module */
% c1 [! {+ v. c  Z6 f# E8 k  uvar SysMin = xdc.useModule('xdc.runtime.SysMin');
4 V5 m$ J$ o2 p: B+ [) f  `- t3 hSysMin.bufSize = 0x1000;* S4 {6 D4 F3 A0 k" T
SysMin.flushAtExit = false;
& T4 Y8 }4 P5 A% w+ |* K& x2 P2 a; J* R: ]9 k
var System = xdc.useModule('xdc.runtime.System');+ a* G9 x0 D9 a: r
System.SupportProxy = SysMin;
* i" O. D2 a& `# k( [. f6 j( a6 ~+ \
/* configure SysBios to use the lower half of Timer 1 */7 q* h8 z! H4 M- s
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');% W; M0 q7 x8 y/ C- ]& q% f* }
var Clock = xdc.useModule('ti.sysbios.knl.Clock');6 n2 b8 U; {/ p2 k* @
Timer.timerSettings[1].master = true;
4 g- `+ W4 M9 k) STimer.defaultHalf = Timer.Half_LOWER;+ J& x2 D% N0 g, d
Clock.timerId = 1;2 w0 z' ~) R% z+ t. t
) I" v  g- a/ S. o& A3 C

! r& U  R$ s1 _. g7 Y/ |/ E! D/*
% w1 e7 _* ?( _) t" g *  ======== Miscellaneous Configuration ========2 N' G: K* O. a
*/
# N- I2 A/ g6 z7 N9 G' i5 \+ F
3 M* H" Q( k" w' G/* set default diags mask */
4 H% R& Y3 _6 x' L/ d% kvar Diags = xdc.useModule('xdc.runtime.Diags');
, ^, `: n& b: `: `4 s- ivar Defaults = xdc.useModule('xdc.runtime.Defaults');
8 Y4 ~8 ^) ?6 T2 y& L/ n" @
  N0 C3 B: K* G1 h" D& \Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;+ |& T1 A9 X9 ^4 U* f# W3 p5 W9 O
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;/ }. }; G. T; Z8 O" k2 z# H
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
6 M% d6 V$ E1 j) `" PDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
" t. V* B/ G$ p: ?5 ZDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */- f% ^+ I# Z5 H# M+ |% V) t  _
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;8 T& _' G. x, [. d% c  A) f* m
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;4 I) E& O5 W  _8 ~
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;- G8 x7 M, |# z7 a' n
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;5 |( [) G" c. P6 F
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
& r) L9 K8 L1 c9 H- S5 O' D" X! jDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;$ T6 q5 G% p0 F& @4 I
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;, P% F# L% X- h1 y; B
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
) K( z: ?3 B* ~! O& d$ sDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;8 }( U& T, F+ `+ S
4 r7 V8 u/ [  I7 c# g4 a# v' N* c/ Q
/* override diags mask for selected modules */
& L: j* d0 f6 [xdc.useModule('xdc.runtime.Main');( Q, T, @- I) {3 o8 Q* D3 o
Diags.setMaskMeta(
* b& ?* H. J% A5 R! J9 q    "xdc.runtime.Main",, @2 q5 k. I7 Y0 d$ ~* I* e
    Diags.ENTRY | Diags.EXIT | Diags.INFO,, C! u: L* j* N  S$ E7 {0 |
    Diags.RUNTIME_ON
: ]9 i8 ^5 `6 ]- ]5 w) J);# }! q/ G* A6 j; r
/ q9 f' J! O( r3 d2 {6 i7 e3 h9 O. H
var Registry = xdc.useModule('xdc.runtime.Registry');
0 d1 l+ m% X! U6 x" i& [* G7 hRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;; j" [# U! \  b
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
! R% U( L$ z9 }# s% fRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;' v& J! ]) v- Y4 e
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;2 d$ s  J. Q1 i" Z- `$ B1 ^

1 f8 S; w/ L, H  Q+ e! o% H5 v/* create a logger instance */: `# ~' P- O2 J& F5 f
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');: M0 b2 n9 V( F) {' A3 j3 \
var loggerBufP = new LoggerBuf.Params();1 u1 v5 Q; U3 ]$ {
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
& e9 j3 d+ B. i, j' E* {loggerBufP.bufType = LoggerBuf.BufType_FIXED;) ~7 ]+ g/ J- Y' D

$ A, i# F7 |( L, ^# evar appLogger = LoggerBuf.create(loggerBufP);
$ c; q9 T: ^- NappLogger.instance.name = "AppLog_Core1";5 v4 ]4 w1 c+ a, j( B1 B7 e
Defaults.common$.logger = appLogger;
+ K& B! j; w" ?. E1 e" T( y6 vMemory.defaultHeapSize = 0x8192;   
8 d0 b- j# Y# G; b, T2 }  hIdle.idleFxns[0] = "&LEDStatus";! s* N" `+ d0 y0 S( X/ h( l
Cache.initSize.l2Size = Cache.L2Size_32K;
* p( `/ T, x6 Z$ h: d/ E# J; {1 n, @, r; J' q6 E7 t
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-17 14:23 , Processed in 0.044384 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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