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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构. Z% }: _6 Y  u6 r9 Z
" ?5 z( V: [, G3 u- X
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
9 }. l( F. F8 f  `* ^: b. c
; A4 E/ J0 O5 A* O4 n! T其他程序段。。。。。7 x8 N) g3 G& W1 z! m

$ s! S. ~: G6 v  g* ], j   free(x_d);
1 \% B4 q/ d$ X& t! J
( @$ a; \; q0 I: h  J使用DSP侧单独调试功能,验证动态申请没有问题,4 v" k/ a9 Q* g$ r) a) d5 L. A

; d2 u( C; @0 h5 l- [; v但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。& ~& f. U; D) o, u# S
! v; T1 u' P7 U  ?. R

' h" l& v9 a7 P: }1 A
( N7 y9 x* h' X$ T2 M3 f7 }) c8 ~- ]$ K, }2 ~+ t6 y

5 `) |9 y; k7 k& p9 m3 a
1 G7 {* L7 o8 e4 w) }
- N/ K/ L) y& l% g
0 g  V; g; x5 z
1 B7 d" T$ V( i& t& c. T' V( Y+ {0 e) e; k2 o2 f5 ^2 U2 n
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
6 h) E( \3 E& f我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下0 y8 H! P( c8 Q* _: I: a
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)1 u" J6 M% I/ i1 P2 {

! h3 j+ O" ^4 M2 m是不是需要在DSP.CFG中进行配置1 \, L' A' [" r3 K$ x
我现在的配置为2 ~' G9 a' S9 ^" Y; w$ m
- X  x# ]+ s+ o- R& d4 m
/*9 _1 V5 ^5 `; w. t& d# r" u
*  ======== Operating System Configuration ========
2 j9 }, j" d" K */- W8 r' S4 R) ]* x* \) B, G

+ \2 l, {  f2 r$ d/* no rts heap */# A; ]3 u) D3 Q* A! G
Program.heap = 0;; k# ?1 W/ D. j( ^6 F
Program.argSize = 100;  /* minimum size */
% G# l! [! |4 `+ b5 AProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
/ }' c2 y% \8 Y+ M, J3 V# c/ w
# X: Y3 p" g6 z# ]9 Y/* create a default heap *// o- u( {: u& J2 ^# J3 Z
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
6 M; W/ \" g8 Uvar heapMemParams = new HeapMem.Params();
5 H% B2 W9 f% I, _; o& ~heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大0 {" C4 W) a/ Z2 C) o( [

7 q9 U5 s, b1 i8 G! E: P
var Memory = xdc.useModule('xdc.runtime.Memory');
3 L& M4 W( z0 vMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
- U1 Q0 W! _9 w9 ?6 m; e% K% z
* f- s0 E% h& e- X/* configure System module */3 y  ~. @0 [+ k
var SysMin = xdc.useModule('xdc.runtime.SysMin');% a7 L2 y( s. ~& g. z
SysMin.bufSize = 0x1000;
  T  d/ P9 r- ~, K2 |5 tSysMin.flushAtExit = false;* z1 _; m0 Q% X6 a' w
4 g6 k8 F. r; L$ |& d
var System = xdc.useModule('xdc.runtime.System');
! m! @: t" ~6 a; H2 E# nSystem.SupportProxy = SysMin;
' Y- l0 P0 }4 R1 D3 {- D
4 n5 F3 \; W- v. _  U! x- s/* configure SysBios to use the lower half of Timer 1 */- g" Y5 ]! d  W1 I3 u1 t2 c% ~6 {
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');6 U% I' ?/ b8 C- z4 @$ K
var Clock = xdc.useModule('ti.sysbios.knl.Clock');5 z' K" o9 i, U5 C8 N$ o; v2 r$ ~
Timer.timerSettings[1].master = true;
* m; z8 M$ o: j- LTimer.defaultHalf = Timer.Half_LOWER;
5 o$ j1 G' y3 j* l+ VClock.timerId = 1;
5 |2 Z- y9 }' P
! c) _9 q& ~) e0 C& G4 [* w4 l7 c6 P# K; ~. N* E) j" J0 ]
/*
; S, `8 f% ]; u/ a+ L *  ======== Miscellaneous Configuration ========4 T$ l$ W( ?& a
*/' P- Z; D& b( N1 }- l7 p* x
9 W7 q- g( N6 N4 _/ u
/* set default diags mask */* z, X) G2 L1 l6 ^7 }
var Diags = xdc.useModule('xdc.runtime.Diags');8 S) T# k1 P+ j+ S% |9 \" a
var Defaults = xdc.useModule('xdc.runtime.Defaults');
1 O$ d& \  [) E& r5 R; L
. C( {, n$ A7 kDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;, }6 q. d  E" h$ r, x4 E: W
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
0 }6 ~( O1 Z; A5 o; k' ^Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;* b& q$ E' i: s9 ]$ T" U6 o4 {
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */# W( ]! U+ s* g% l1 |  W1 R0 [
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
4 L( P( ?9 ?. `8 [Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
- q7 r9 h1 v6 x) H4 i! [" C& ZDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;6 ?: \- I4 L7 q2 B7 b- n
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;1 u3 \; R  P  S* r, W, G* o; h
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;' X$ s1 S- V( A
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;! m2 H$ q! }6 m* w* _7 g
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
; ?; O# k$ J, q& vDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
7 z0 y# R) c  z+ ADefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
8 q0 k) x4 m3 J& }Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
1 J! s) c+ L& |  @! \$ P, X0 o' t! a' c! B! o$ |- e  y
/* override diags mask for selected modules */
& g/ ?2 I" v. u7 Ixdc.useModule('xdc.runtime.Main');
& y+ P: O/ I# b$ N# Q* v% CDiags.setMaskMeta(7 [  @5 K9 T# G0 _+ J  z! R
    "xdc.runtime.Main",! [0 X. _2 E9 G* z6 ?
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
9 [1 F8 R5 Y% X8 n    Diags.RUNTIME_ON
, J2 ]9 ^  `( _5 u1 K: m);
* V4 S+ J, C- ^7 {+ Q6 ?  X7 Z
0 S* o2 K5 z  y5 r& w: W" ^1 Zvar Registry = xdc.useModule('xdc.runtime.Registry');
6 n( p3 W, X& I% ]Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;, y' Q0 |- l' q  g+ t
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
3 G0 {$ [; }+ C1 G' t4 ZRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
9 G5 ~% N2 V0 J0 FRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;! e! N' R+ Y) F0 x

- h& ?% A7 y8 `6 e) L+ V2 V0 t/* create a logger instance */
7 M3 P: E$ T1 Svar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');: H  D0 Y! N4 }, r& [1 m/ C, q" w
var loggerBufP = new LoggerBuf.Params();' R6 h3 }8 p- p1 i1 N- d
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
. Z/ u0 [9 j# ]0 c9 w3 Y7 iloggerBufP.bufType = LoggerBuf.BufType_FIXED;5 D- ^/ F  H4 {* @$ j

; o; _" h- R' X. Bvar appLogger = LoggerBuf.create(loggerBufP);
- O9 F9 [# V9 ^% Q6 M) C& [  happLogger.instance.name = "AppLog_Core1";+ s2 X9 |2 l% e& z& M
Defaults.common$.logger = appLogger;
( C& g# M# s  hMemory.defaultHeapSize = 0x8192;   
( M3 n) u; M7 ]Idle.idleFxns[0] = "&LEDStatus";6 r' H3 ?+ `: f3 x+ u
Cache.initSize.l2Size = Cache.L2Size_32K;& L/ z# S5 {' `; }7 j% W6 Q: Q

. @0 u- X" \" X
回复 支持 反对

使用道具 举报

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 */5 k3 D$ s+ z+ b) O. ?' F4 {
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
- V" p' V) M1 t! f1 Pvar heapMemParams = new HeapMem.Params();6 o# e2 S7 W- [9 b1 O9 B! F3 A: p
heapMemParams.size = 0x4000;
0 o" \* Q& C8 P: R9 V/ K1 O' Q
var Memory = xdc.useModule('xdc.runtime.Memory');
0 o( i% W4 M5 a: B; Y3 KMemory.defaultHeapInstance = HeapMem.create(heapMemParams);8 x7 D6 N8 y+ T" \
$ F9 T. m0 z! i0 F
我大约calloc  每次共计大小为5K*16bits,$ I8 l# ~5 t' L! `5 [3 R3 ~& a
而默认配置才0x4000、需要改大。7 w4 G3 G8 j$ E6 n. z
' K1 H" R* h/ T5 K! i9 E) o
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
/ r9 l# w; h' i* c  j8 Q: hProgram.heap = 0;
8 b$ u! \- D. I( a  vProgram.argSize = 100;  /* minimum size */! Y( Z9 I' \" P& U
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-13 04:34 , Processed in 0.040007 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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