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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构; \2 b! G( N0 k! k8 B2 S" s4 @& V+ |: ?
7 J) x% m# o+ I" B5 a" {3 {" t
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256- G2 J6 h! ^" d* }. c0 n* v

+ {# r! O5 C- P, m" e, d) n1 D其他程序段。。。。。! C5 `5 k8 o7 ^) u7 B, O  j4 J

" B8 v1 Y6 M4 s5 E7 M7 S   free(x_d);: h- s' o# ^+ S' `- c: V( v( a

7 u! n  w" l9 W: Q8 o/ [使用DSP侧单独调试功能,验证动态申请没有问题,
! X9 n$ D* f4 q9 b4 J& Q8 y" ^, i# C4 [' d7 K  r
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。9 c" G& n8 y) [8 c4 J

# o, ~& p! r6 H% K& U3 X5 t& K. f: m0 S# F/ h& q- V9 J8 Q& s3 V

$ r" J0 u- F" [( Q2 ~8 v3 O8 P3 \  B
2 {$ C: @, ~0 b' i/ i4 R" Z7 |! V2 s( I3 H$ H# x

' X( D( Z" |4 {* M1 |3 E, P- e
" N( N4 z, Z/ Q. a( ?" D
1 X- ]3 I' v) c: n  ^( E
/ h( \6 ~! `8 A. ?# ]5 X/ y1 V1 e( I- O& S& P! Y
分享到:  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 *// p' d: m+ p% b5 b# N0 D4 \* s" M
Program.heap = 0;% D0 s1 s: n* M% ?3 t9 G7 e) d
Program.argSize = 100;  /* minimum size *// o! J2 U# g% D* U8 j* |
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */! G1 u4 }) ?/ A8 J  n6 z
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');5 v) t! W0 [2 m' J8 A
var heapMemParams = new HeapMem.Params();
! G! t; U4 t: `heapMemParams.size = 0x4000;% A' Y7 ^4 ~. n: p0 ^

( d2 }: s$ o1 m- e2 Jvar Memory = xdc.useModule('xdc.runtime.Memory');) a" n* \( Q: O: y# Q6 w
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);, m( K  l; C$ z/ m6 f# k+ _* L! P- n* L
) |/ h" G; r9 H7 U
我大约calloc  每次共计大小为5K*16bits,
& n% C2 ~) ^4 l% O8 W$ e, p8 [& a而默认配置才0x4000、需要改大。' q* I7 d# @& W9 \8 C  P2 h
3 Q* i3 [8 d% `8 I/ h$ S: H
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明
0 E* E( t; S8 J我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
# u# R  w+ X# V" d  ^(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
0 S& }9 F( V) T( {3 o3 G

1 t% C9 m( u- b7 r2 r  N# Y是不是需要在DSP.CFG中进行配置
" E2 k% N% c0 t$ `我现在的配置为5 X# j& X; q5 N3 b% I  v
4 F+ ]( o$ W7 \& Z8 q) t% e- O/ T
/*
* `  J! d; r: U' K% Y7 H *  ======== Operating System Configuration ========
5 F  r9 y& W$ f' W8 K */
7 k, Z# l1 o* v9 Y+ C4 ?; H
9 G9 b7 S# l/ Y) ]( i/* no rts heap */
! U6 B0 P8 k& z/ f9 _Program.heap = 0;; y2 G' a  u: {: S0 J- Q
Program.argSize = 100;  /* minimum size */2 b2 }+ ]' l; p/ J4 ]8 Y+ q
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大0 J0 _' f( b$ d" h

9 u- k: i& b6 Y: v& w/* create a default heap */4 J, d' w3 u$ Q% [' M- n% S
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
5 R0 Z8 T/ D- @& @; p, V5 W& rvar heapMemParams = new HeapMem.Params();* o! {/ j- P# {- \3 v
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大: M# `4 J( c( @

; C, u! x9 y: ^; x" y
var Memory = xdc.useModule('xdc.runtime.Memory');
/ C2 o# v: Y( [! l2 z. {3 @Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
2 U2 B  r2 d" r2 M
. r3 o7 h7 f6 n' v1 |5 e/* configure System module */
$ p; [4 l2 j' [- O  @, v: y! ^var SysMin = xdc.useModule('xdc.runtime.SysMin');5 O& |* c4 _* b2 c: @/ G7 P9 H
SysMin.bufSize = 0x1000;' f3 f1 z8 }9 |2 ?; a  ?
SysMin.flushAtExit = false;
. l/ X0 s) o: O1 l& s
9 w! Y9 E0 B1 f) I4 Wvar System = xdc.useModule('xdc.runtime.System');2 t5 f$ q' D& {# ^
System.SupportProxy = SysMin;* g. d6 F/ C/ G& n

- A; t( w% [+ l. r$ k# T# _4 {/* configure SysBios to use the lower half of Timer 1 */. w9 r3 y7 j& ?8 H0 d2 d
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
  ]# F) d2 v4 b- a# g6 @var Clock = xdc.useModule('ti.sysbios.knl.Clock');( i( R7 F9 U0 I1 ?, m
Timer.timerSettings[1].master = true;
8 d; W8 t3 b2 [4 @5 j: z1 t6 f' q  NTimer.defaultHalf = Timer.Half_LOWER;- P9 V, Q% [& K7 L9 H0 K. D/ ?7 P
Clock.timerId = 1;
% U  D4 W8 B9 u. A$ z' ^5 @7 E1 P2 @
( z9 n5 M) F( A% \) s" X: A6 U& F. `+ [2 ]9 L" ^
/*/ \2 }, [; {& R; ^0 }# u' G0 w
*  ======== Miscellaneous Configuration ========0 v; ~. O0 I. s% E& ~1 y$ v; k% d! W
*/( Q) i0 C) u! Q9 G9 T9 E' Q
: L# i8 v. R+ J/ k# B( ]
/* set default diags mask */
+ p( E" {* u, j: Q+ E' @2 dvar Diags = xdc.useModule('xdc.runtime.Diags');
% O4 Y! s; K3 Z; Vvar Defaults = xdc.useModule('xdc.runtime.Defaults');
; x" e( C, H( y$ j( L# n5 ?
3 r- y: o) Z' L9 K* s, U+ {Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;7 @1 B# }0 Z# V/ K; n
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;  v4 w; J$ |6 r8 U  ]0 ]5 t: Q' F
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
, Z  @, i/ ^% }  T9 o6 X4 f) i+ uDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
+ s/ B# l8 K7 I6 E& y4 p+ XDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */9 a! c) e9 _; \4 d) p
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
# k. v  Y) b" q/ L# XDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
- I+ ~/ z4 j! C' {  xDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;+ b* g3 |$ ~5 n  y* ~9 ~4 l9 ~: L
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;/ D  Q( {) _1 o& L
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
$ t/ l4 E0 A5 R! ]/ C+ EDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
+ b9 k1 e* U, M- F4 I( Z8 ZDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
- ~* d9 y( f! S% v4 zDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;' c, m0 O. J$ }3 S
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;7 U- a$ s$ L& ^) _# K+ _/ w

) C8 t' T8 R+ @* t/* override diags mask for selected modules */
8 D; K" a) E0 T4 b- l$ qxdc.useModule('xdc.runtime.Main');
: k+ A/ ?! g, \- n, v8 k. yDiags.setMaskMeta(
$ N1 m) O7 e6 }- _- I7 K' i" c    "xdc.runtime.Main",
. k. z( d% w% P8 ?    Diags.ENTRY | Diags.EXIT | Diags.INFO,
+ u$ g/ @3 n7 G    Diags.RUNTIME_ON
9 L+ h" }! j5 M# b) m, ^1 w);! A" M- A4 H. O; s. s
7 |! t0 ?* o+ A4 }) k" L/ m
var Registry = xdc.useModule('xdc.runtime.Registry');( d( o' f5 s3 I" L/ N3 \; \
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
+ Y: G8 e" L6 B6 F- qRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
* M8 \* u1 f5 X' ]. |Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;2 B% a/ T4 f% D+ n8 o! X, E2 L; q
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;, S$ U) Y& z2 \  o2 }  V
, m' p8 h6 S# O. q) {& V
/* create a logger instance */: _; _7 b% j) `
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
: O  ^: C. c: @3 _" w5 m' f3 Evar loggerBufP = new LoggerBuf.Params();' o$ C$ W7 b) Z) S
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
6 \1 r5 Y: ]% GloggerBufP.bufType = LoggerBuf.BufType_FIXED;
1 s% Y  j- C8 O0 u- m# J( H3 J, v3 \4 R9 y2 {5 {' k7 n$ ?
var appLogger = LoggerBuf.create(loggerBufP);
) D: \; h6 e$ U; w3 `& Z7 VappLogger.instance.name = "AppLog_Core1";
  ^1 E3 K% m! V$ p5 m0 d& c4 mDefaults.common$.logger = appLogger;6 A6 C2 U8 b5 q2 @8 W+ R  n: i
Memory.defaultHeapSize = 0x8192;   
/ ?. |# l1 [! L/ O& c# K3 s! bIdle.idleFxns[0] = "&LEDStatus";
! l7 e* K% r8 ^$ `Cache.initSize.l2Size = Cache.L2Size_32K;3 ^" `5 I* G: M! \( K' J/ }1 q

4 k9 n+ H  z' Z" |* C
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-4 07:46 , Processed in 0.045657 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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