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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构7 G9 Y0 c: a* t' T; g* q/ g
% ]2 j, j: \6 T" b& y# E# h
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
* C1 i& T/ J' v' l: j! `: L4 u5 r5 b; B9 {
其他程序段。。。。。+ b. l( I4 j& ?. |# d1 S2 q/ o* [  w2 B
+ t0 }6 i- F( k; r9 @) |- _
   free(x_d);; O! x" [$ y0 n7 W

% q- a; H. g  M) q. K' C使用DSP侧单独调试功能,验证动态申请没有问题,6 F' ~: P  F$ k; n

. D/ B: L3 b# {( i. o: p但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
' T/ p( S0 R0 s' C' j) z, r

; h) Z# L$ [' B4 j0 q. t( M
! ~" }% i& `. Z( L$ ~' Q6 g+ ]8 E" Z; R( ^0 D7 C

% E6 I  y- t9 u% L6 g& Y; E3 z" Q3 q/ ?8 e' F
2 @0 v& o3 L  e; E0 C" |% y

! K5 H: }+ D# s" O. X" |* ]$ v
8 g' o' z7 ^* `: |8 k
+ [9 ]$ a- a- Z* f& X+ C# [) s8 O5 C( n5 I; j5 _& K4 m
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
& M7 w$ x- p5 I3 W, z5 N- e9 C我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
( i; C2 H& U+ w(不过疑惑的是,为何单独DSP仿真就没有问题呢?). Y8 q$ y/ M9 k
  j; H8 E8 ]% S% J/ N
是不是需要在DSP.CFG中进行配置+ ]3 @' ?6 }+ [2 K
我现在的配置为' R) J3 }% R/ ^
* b3 t6 M4 m: G3 L+ }% ]
/*
" ~- A  }! |% A4 L- X; L8 ~ *  ======== Operating System Configuration ========
  Y& H) M( t& Z! I0 k. |0 D */5 P( Y' T! Z0 X4 I, f# g
) f1 F6 W* |0 j6 E& c7 B1 b& f
/* no rts heap */
4 z3 _6 c, C) v2 ]' ZProgram.heap = 0;; A2 A3 l; Z+ T' P; j! }
Program.argSize = 100;  /* minimum size */
: x0 l, p0 Y+ k/ U- A; mProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大8 A8 I/ P4 O2 B7 L5 F
' b! Z* @1 Y5 R2 Y* Z
/* create a default heap */
& v7 V1 C/ {+ m# M, b! @var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
5 Z! g- G, D1 R2 \4 gvar heapMemParams = new HeapMem.Params();: F5 M2 \8 o1 x7 M
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
2 _9 t0 P0 H9 c6 Y- R9 I7 _7 G: l( Z5 u6 s% K4 f# q2 o( m
var Memory = xdc.useModule('xdc.runtime.Memory');
8 R! [6 B) \9 O2 XMemory.defaultHeapInstance = HeapMem.create(heapMemParams);/ o8 [. E8 i8 _$ l# ~" K
* L: ]6 h8 H/ ]
/* configure System module */
0 \5 N5 U" [# i: |var SysMin = xdc.useModule('xdc.runtime.SysMin');
/ s# O* s2 o$ [* ESysMin.bufSize = 0x1000;( j! v9 ~2 Z: }$ h$ P
SysMin.flushAtExit = false;
9 Y; d0 b. s: F6 G
+ L2 ~, w# l0 k/ lvar System = xdc.useModule('xdc.runtime.System');
/ T- Q  {  M) b1 {3 LSystem.SupportProxy = SysMin;
3 N0 e* W: b! |7 Z( `
+ E" P9 |0 m* p, l6 m/* configure SysBios to use the lower half of Timer 1 */
  d7 [( X* b8 Ovar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
- Z' y8 {1 d8 Nvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
! Z' f% A9 E8 V8 Q5 ?Timer.timerSettings[1].master = true;0 O$ X' @! a6 `0 \4 N; `' p: h
Timer.defaultHalf = Timer.Half_LOWER;; l0 @+ B: M5 Y: V
Clock.timerId = 1;: t7 d" \% u( o$ E' _  t/ Q
! J" e2 e$ [- T* b  u$ l5 N8 }
/ L/ O9 L5 V( Z4 w: |6 H
/*
2 S2 T! m! l1 |. @3 T *  ======== Miscellaneous Configuration ========
! D5 w$ x1 J6 S: j$ _8 V3 A *// }; `* ]8 w  f
( i+ T7 G8 o4 I! O1 b. Q9 y
/* set default diags mask */
- H% B' v* D4 W& p% }var Diags = xdc.useModule('xdc.runtime.Diags');
, D5 `- q8 u- f7 I/ `9 K; Evar Defaults = xdc.useModule('xdc.runtime.Defaults');
+ i+ L5 p5 C1 T0 f/ w
/ y0 {  T- {0 f. g# oDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;) X; A9 w' V, F! w
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;( G7 ^  I9 ~3 r
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;# A. o' X0 p4 e/ m  u& B% d
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */! t# M: ]% W2 B& J) F5 o
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */& X( G3 c: a' j% {4 I3 i8 P( {
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;  p& a8 e: \( ?& o7 p  i3 f
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;. K8 _: k4 X/ d* J5 j
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;7 Q3 `. ?; X6 W$ y) D
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
5 t" y. N, W9 sDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;3 b, F: t$ A/ O. `1 f
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
5 p* N: L2 J, s6 fDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;# B9 F+ |$ T& _
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;8 B) H$ z) a8 n" T! K
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;& x, w7 V9 ?1 R$ m& f. ~/ L
% d" r/ I: ^0 ~4 y- }2 Z
/* override diags mask for selected modules */
" C" s9 \2 K1 t' X3 b4 C+ Exdc.useModule('xdc.runtime.Main');
# G7 R% p- b# E. `8 DDiags.setMaskMeta(
+ K- x: A6 i  m' L* J( L    "xdc.runtime.Main",
$ k( i2 R- m3 k1 ]/ {    Diags.ENTRY | Diags.EXIT | Diags.INFO,/ l% L  z( T7 P2 U. q
    Diags.RUNTIME_ON
# B( j: i: R! B8 j$ Y; z. ], ?);
7 A, \) L3 p8 Q# S
! T  \+ [3 H* dvar Registry = xdc.useModule('xdc.runtime.Registry');3 N/ O' m" g/ h% ^) @
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
! M4 ^+ ^+ I! N$ A! Z* MRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
! u' c4 B/ S" \. T2 qRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
+ f* a# h7 x* R& yRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;4 v( m6 n  Y8 R$ r
2 \% i7 m( w) s! W. z. ~$ [
/* create a logger instance *// X, ^! |0 W+ }! ]# v
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
5 ~3 ^8 X. \% Vvar loggerBufP = new LoggerBuf.Params();
( }8 n6 z" [5 Z+ L0 uloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
- O; T9 i% @( h  W2 n8 n6 T  ~loggerBufP.bufType = LoggerBuf.BufType_FIXED;
0 _! T: e3 \& u! `8 S" b  M. F8 g; Z* _/ w# F6 u3 y( B
var appLogger = LoggerBuf.create(loggerBufP);
" i4 e& e8 J$ b6 A3 T6 G& iappLogger.instance.name = "AppLog_Core1";' S) y1 S3 [8 A& L% j
Defaults.common$.logger = appLogger;
( B! L" z6 i( s! f% BMemory.defaultHeapSize = 0x8192;    8 u0 L3 |+ A- q
Idle.idleFxns[0] = "&LEDStatus";% k. v* [( K6 z0 o( F
Cache.initSize.l2Size = Cache.L2Size_32K;
# J" Q( U$ T2 G/ j. P: n) M" \: b, J1 Z: _  V! S
回复 支持 反对

使用道具 举报

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 */
; c1 c0 {6 }% h, k' b+ ^var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');4 p; f7 x( x- i0 z/ M! M+ r/ F
var heapMemParams = new HeapMem.Params();8 e- m5 Q0 ]' a) U
heapMemParams.size = 0x4000;
3 W$ V  w! H' k
: Z4 A, ^; }! h/ ~$ i% hvar Memory = xdc.useModule('xdc.runtime.Memory');' W7 Y5 v: `" l7 Y9 `/ u1 d7 P
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
6 U! z( H5 |8 Z, p; x
, @+ W8 S/ j# s我大约calloc  每次共计大小为5K*16bits,5 O8 }: |( X$ v5 A3 ]: K* O
而默认配置才0x4000、需要改大。
/ H8 G. v$ Q5 b' I9 y. @. e7 `+ n  H7 M% l( F) t: m, j- M
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */6 ]5 i$ Q" g) h$ J/ q) G( B& v% g) b
Program.heap = 0;8 b" P" c0 M/ [# w* @* N# V
Program.argSize = 100;  /* minimum size */
/ ]) o1 i$ c; \3 H2 m* V4 AProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-22 15:53 , Processed in 0.042303 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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