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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构, b" c1 Q; O' u+ F; i+ v. K
$ }$ D5 d9 Y$ \( V, B/ ^
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256# O( w  Q, J, u; N' r! M0 E

* Y% F3 K3 ~. }; Q. t( W4 V其他程序段。。。。。
' G& j0 S- X; a5 Y5 w' C+ X$ ~% j% q 4 o/ V& Y. d" j  }5 S( p
   free(x_d);
# R. q5 Y) b; @* C: Z# H
3 b5 ]# ~; a7 F. |2 t使用DSP侧单独调试功能,验证动态申请没有问题,) O! h( X! n* `. U. Q5 i3 D1 @& I* f

  e) o& j" L) w" m但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。" F! b+ C7 U2 S; E* s9 r' i. J% l

7 B9 v, |0 k( p5 {# Q
! l/ l+ \* b9 e$ h
/ T# C6 n) [& E& U. A+ Y& `6 R0 {" {
2 V6 n5 B, m2 W0 ?  K
9 E5 J6 n$ t  ], U7 q
/ t( [5 {) ^2 `4 L

8 i1 ^9 h% Q+ [1 p- f! T( v
2 B: z5 p8 ~5 i( ^
! F0 ?9 ~4 ]1 y
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
: @; r  z# u( A# l我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
, F, f6 Q* m& D8 U  q(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
, |+ C% F9 N5 n
- E# S# W( U6 a2 {9 {, o  f  H
是不是需要在DSP.CFG中进行配置
; p( k" n# n+ M. d  _7 ~  G9 S" K我现在的配置为6 L; q' \3 \& A2 b
% f5 f9 I% x/ t. U' M
/*' M" b1 U# w. `) l1 v, P4 b0 _# n
*  ======== Operating System Configuration ========
' e) d" ^1 ?% {7 C */! T) j! b7 g$ {( L/ l" Q5 J

; u5 B' }2 b/ {( N% z& n/* no rts heap */
' |. h! x# W" N# D) T, N( N8 {' NProgram.heap = 0;
2 \& Y0 L, t: u# \: @0 J4 ~7 NProgram.argSize = 100;  /* minimum size */$ ?/ ?! P7 C2 E. Z0 c  ~
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
( Y6 n( q/ E! b7 b3 U+ ?$ o; r9 Q# W  }# w: f0 S& m
/* create a default heap */7 S6 U! I6 m" L
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
: N) h/ j  K; yvar heapMemParams = new HeapMem.Params();
' y# x) K& J: y# ~, u% mheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
. @2 ]" E0 K# z# l; I5 A  ?& @9 T% ?/ z# f' o0 n
var Memory = xdc.useModule('xdc.runtime.Memory');
8 m8 U8 |3 `3 M4 v, _! vMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
5 W+ {) d% P; a1 q; q+ O! n
! w6 I5 y+ t0 B+ z# o, K' c5 J/* configure System module */
" n6 F9 A5 g' o" G& N/ s6 @/ mvar SysMin = xdc.useModule('xdc.runtime.SysMin');
$ m' L  \5 S& z7 c% [SysMin.bufSize = 0x1000;
: Z1 w0 }" T! O: z6 A& H% KSysMin.flushAtExit = false;4 `4 d) t  O3 P  Z

  F* S2 ^* P- M7 uvar System = xdc.useModule('xdc.runtime.System');& ?+ m) Z$ ?$ Z1 E1 d" y. C
System.SupportProxy = SysMin;0 X. I1 c* _6 m" a# Z
1 n+ P6 u4 Y' L6 x, l& k
/* configure SysBios to use the lower half of Timer 1 */
7 ^# [# Y5 [) X1 ]' t: zvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
" r8 F  I: I/ E: u! l- Yvar Clock = xdc.useModule('ti.sysbios.knl.Clock');6 u6 H9 L/ }/ D' ]. C, A& \
Timer.timerSettings[1].master = true;
1 ?9 n/ X/ ]2 k3 W1 m& pTimer.defaultHalf = Timer.Half_LOWER;* T1 X" v# y$ }: b% ?
Clock.timerId = 1;' A$ z' d9 i- U+ z1 d2 I
% T6 X6 s. u* D" O% c

* f7 v- j1 Y/ C! K) F/*
' D" F* b9 f5 o *  ======== Miscellaneous Configuration ========
* o: Y! w, e4 q0 J" o */9 m( |% J' `% f/ _! b7 f

2 Q1 d/ u# s% K! [3 E) w/* set default diags mask */# t2 ]0 {, _7 I6 R
var Diags = xdc.useModule('xdc.runtime.Diags');
" G) [" w' {# g! b4 K3 D6 qvar Defaults = xdc.useModule('xdc.runtime.Defaults');, c" e: y: X0 ]# l; M* C

+ \' J9 y3 s& _# lDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
- K3 n' x- o# S  Z& G; I+ |9 ODefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
5 e2 e2 a' S: m& p) cDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;4 i5 p3 k' o" O* L' W0 b
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
  t% b7 e$ W: u3 eDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
. A4 A3 D* w/ Y6 f7 \1 bDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
" @  ^- b3 {2 L2 ?3 b3 nDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
# x- ?/ i! ?% @$ @9 |( HDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
! J, C9 }, P/ }6 z7 _& t9 `Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;! D2 \; i* {  y1 y3 s
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;$ C1 V; ]8 f! o# F9 `
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
6 i' ?1 w+ J# ZDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;  h8 G/ Q7 N' o/ c$ v+ G( i
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;9 r+ P5 l+ J9 r& _& [5 b3 i- b" J2 F
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;! W) v5 r# l% ?9 S% g0 w; L
9 r) _6 s+ ]+ D3 `% y5 c% |+ H
/* override diags mask for selected modules */
6 K& |6 x# c% N( e6 b1 Ixdc.useModule('xdc.runtime.Main');
5 N4 s3 X: i3 r. w( x# cDiags.setMaskMeta(
# M: p& ]: q3 Y( K  x    "xdc.runtime.Main",  W* G+ N2 T) k' b
    Diags.ENTRY | Diags.EXIT | Diags.INFO,& }( B2 [) c, ~
    Diags.RUNTIME_ON/ [/ w+ M! ?! Z! ~6 w7 K5 p
);
7 X% J7 H& d9 a* M8 `
, x0 ?8 S8 W) jvar Registry = xdc.useModule('xdc.runtime.Registry');
# e" E/ ]$ q5 C& g$ k: E4 a( \Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
$ w  p# j5 G+ w, U% A7 h# Y2 R4 QRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
; i9 N" u3 T# PRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;+ |% {& ?/ R3 p7 R
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
/ E* M# ~' c4 Y" {/ ?% \1 G2 S: Y  u) d
/* create a logger instance */; O9 Y+ N, V* d) o9 O4 D5 E
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');# y* p  f+ a2 P# ^. W+ j$ y
var loggerBufP = new LoggerBuf.Params();* P) F6 J$ {$ A/ ^4 |  D" a2 K
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
% U* U# T7 G$ m% _4 z7 _8 M  EloggerBufP.bufType = LoggerBuf.BufType_FIXED;: Z$ F; }* G$ }) d  }

! S$ C4 M2 P/ z3 [. ~1 Wvar appLogger = LoggerBuf.create(loggerBufP);) r) v2 z6 y' k' F( q
appLogger.instance.name = "AppLog_Core1";, T" |$ o) X. G5 P9 X8 e8 @
Defaults.common$.logger = appLogger;
5 Z9 |" J# c# x7 s. A) h2 kMemory.defaultHeapSize = 0x8192;   
' d* x( l+ E, F/ l9 E" X3 tIdle.idleFxns[0] = "&LEDStatus";
; I$ E) @! o5 K/ m  ?Cache.initSize.l2Size = Cache.L2Size_32K;, A" a$ {4 G) e/ d2 ^! @

/ C, s8 w) {$ H$ Z
回复 支持 反对

使用道具 举报

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 */
2 z5 T  x  l( t) i; y& S+ J3 Ovar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
; M* @' g7 w/ p$ N3 t: \$ \* Qvar heapMemParams = new HeapMem.Params();
0 t) c; g) K$ I2 I8 d2 N2 IheapMemParams.size = 0x4000;% a. ?9 t4 f' W6 O

9 Y" m: t9 p% ^- Bvar Memory = xdc.useModule('xdc.runtime.Memory');8 W1 P; `; i( `5 M
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
% h# U8 @5 s; p9 h# z4 X, `! a3 V1 t; F1 l6 G2 O0 t
我大约calloc  每次共计大小为5K*16bits,! [; P9 t6 m6 a# C
而默认配置才0x4000、需要改大。
4 w; J8 w# e9 w+ T+ X4 L8 i. j
* K- y, S% s8 t* [
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
- Y0 m7 L; t& \Program.heap = 0;
6 d% f; T, Q) N  H- LProgram.argSize = 100;  /* minimum size */
4 `1 P9 G/ D5 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-9 20:23 , Processed in 0.042283 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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